Estoy haciendo movimientos para mi cámara en unidad. La posición inicial de mi cámara es 0,0,0. Cuando presiono la tecla W, el código tomo la posición actual y la multiplico por una velocidad de movimiento y la igualo a otro vector 3 para luego actualizar la posición de la cámara. Funciona muy bien, pero no puedo entender por qué cuando lo pienso.
Si mi cámara se inicializa en 0,0,0, ¿por qué transform.forward * motionSpeed no siempre es igual a 0?
Esto es lo mismo para todas las direcciones. Solo usé W como ejemplo.
Cualquier ayuda sería muy apreciada ya que soy nuevo en Unity. Gracias
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMovement : MonoBehaviour
{
private Vector3 newPosition;
[SerializeField] private float movementSpeed;
[SerializeField] private float movementTime;
// Start is called before the first frame update
void Start()
{
newPosition = transform.position;
Debug.Log(transform.position); //prints 0.0,0.0,0.0
Debug.Log(transform.forward * movementSpeed); //prints 0.0,0.0,0.3
}
// Update is called once per frame
void Update()
{
handleKeyboardInput();
}
void handleKeyboardInput()
{
if (Input.GetKey(KeyCode.W))
{
newPosition += (transform.forward * movementSpeed);
}
if (Input.GetKey(KeyCode.A))
{
newPosition += (transform.right * -movementSpeed);
}
if (Input.GetKey(KeyCode.S))
{
newPosition += (transform.forward * -movementSpeed);
}
if (Input.GetKey(KeyCode.D))
{
newPosition += (transform.right * movementSpeed);
}
transform.position = Vector3.Lerp(transform.position, newPosition, Time.deltaTime * movementTime);
}
}
------------------------------------
La razón por la que su código funciona es porque transform.forward y transform.right se refieren a las direcciones hacia adelante y hacia la derecha de su reproductor. Cuando agregas transform.forward * speed a tu newPosition, estás agregando la dirección de avance del jugador pero con una magnitud (longitud) de tu velocidad.
Si quieres intentar entenderlo mejor, puedes usar print(transform.forward) o print(transform.forward * speed) o hacer Debug.drawRay(transform.position, transform.forward)
1
Muchas gracias, aclaraste mi problema. EraPensar que transform.forward se refería a una coordenada que cambiaba dependiendo de la posición de la cámara en lugar de un valor constante, por lo que incluso esperaba que se acelerara cuanto más me alejara del centro del mundo.
- JCoder38
27/03/2021 a las 11:10
------------------------------------
Tu código está multiplicando transform.forward(0,0,1) o transform.right, ambos no son vectores cero, sino que representan la dirección especificada.
------------------------------------
Vector3.forward es (0,0,1) si no quieres usar Vector3.zero.