Suavizar el movimiento y la velocidad del jugador.
– UnityAssets3Free
hola , me llamo kein y esta vez os traigo
esta pregunta
Sé que esta pregunta ya se ha hecho varias veces, pero no la encontré en la ruta de mi código. Al mover mi playerObject, considero la dirección en la que la cámara mira atm. Lo que quiero hacer es ralentizar el movimiento, pero no funciona con el walkSpeed que uso. También quiero suavizar el movimiento (inicio y final).
public void UpdateMovement()
{
Vector2 targetDir = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); //In targetDir the direction the Player wants to move to is saved -> player presses W means forward
// targetDir = Vector2.ClampMagnitude(targetDir, 1);
Vector3 camForward = cam.forward; //camForward saves the direction, the cam is looking actually
Vector3 camRight = cam.right; //camRight saves the actual right side of the cam
camForward.y = 0.0f; //y=0 because we don't want to fly or go into the ground
camRight.y = 0.0f;
camForward = camForward.normalized;
camRight = camRight.normalized;
transform.position += (camForward * targetDir.y + camRight * targetDir.x) * walkSpeed * Time.deltaTime;
2 respuestas 2
No estoy seguro exactamente cuál es el contexto de lo que está tratando de hacer aquí, pero creo que está buscando Vector2.Lerp().
La forma en que lo usa es calcular primero una posición de destino como un vector. Después,
Vector2 target = new Vector2(targetX, targetY)
Te dejaré averiguar qué son targetX y targetY, en función de dónde estés tratando de mover lo que estás moviendo.
Entonces llegarías con velocidad, que es lo que ya estás haciendo. Igual a:
float speed = walkSpeed * Time.deltatime;
Finalmente, en lugar de establecer la posición directamente, utiliza la función Lerp.
transform.position = Vector2.Lerp(transform.position, target, speed);
No he probado nada de esto, y solo lo escribí sobre la marcha, pero estoy seguro de que esto es lo que estás buscando.
Escribí un script que puedes intentar crear un cubo, lo siento porque también soy un unity3d novato pero espero que te ayude
private Transform player;
Vector3 toposition;//interpolation
void Start()
player = this.transform;
toposition = new Vector3(0,5,0);
// Start is called before the first frame update
void Update()
if(Input.GetKey(KeyCode.W))
UpdateMovement();
public void UpdateMovement()
player.transform.position = Vector3.Lerp(transform.position, toposition, Time.deltaTime * 5f);
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
eso es todo,espero que te halla servido