Podemos mover GameObjects de diferentes formas, seja pelo método Translate ou até mesmo por meio de keyframes de animações. Saber qual recurso utilizar é muito importante para que a performance do projeto não seja impactada.
A classe Vector3 contém inúmeros métodos, um deles que é o que vamos estudar hoje, é o Lerp. Ele recebe a posição inicial, posição final e o tempo que vai levar para o GameObject se deslocar do ponto A para o B.
Para o nosso exemplo, vamos mover um cubo para um determinado ponto, que aqui está definido como um Empty.
A utilização do método é bem simples, basicamente ele executa o calculo (a + (b - a) * t) a cada frame.
Vamos criar um script chamado de PositionLerp, ele contém todo código comentado abaixo.
using UnityEngine;
public class PositionLerp : MonoBehaviour
{
//Transform com a posição final
public Transform destination;
//Velocidade de locomoção
public float velocity = 5.0f;
//Controla se a tecla E foi pressionada
private bool move = false;
void Update()
{
//Verifica se a tecla E foi pressionada
if (Input.GetKeyDown(KeyCode.E))
move = true;
//Caso o valor da variável move seja false, então ignora os passos seguintes
if (!move)
return;
//A posição do objeto a cada novo frame recebe o calculo do método Lerp
transform.position = Vector3.Lerp(
transform.position, //Posição inicial
destination.position, //Posição final
velocity * Time.deltaTime //Velocidade multiplicado por 0.02 segundos (deltaTime padrão)
);
}
}
O nosso exemplo acima está todo comentado, mas vamos entender o motivo de detectarmos quando uma tecla é pressionada. Como não queremos que o objeto comece a andar sozinho após a cena iniciar, criamos a variável move que recebe o valor true se pressionarmos a tecla E.
Arraste o script para o GameObject que deseja mover, em seguida, na propriedade destination do script, arraste o GameObject de destino, como mostra a imagem abaixo. Na propriedade velocity você pode testar diferentes valores até deixar a velocidade devidamente ajustada.
Agora é só reproduzir o game e pressionar a tecla E para que a movimentação aconteça.