Vire-se na direção do movimento
Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 42 de 63.
transform.LookAt precisa de um ponto para olhar. Muitas vezes, o que você tem é uma direção: uma velocidade, o vento, o sentido em que algo se moveu. Quaternion.LookRotation(direction) retorna a rotação cujo eixo para a frente (a seta azul do eixo z) aponta nessa direção, mantendo o eixo para cima do objeto voltado para o eixo para cima do mundo. Uma flecha disparada para o ar aponta para cima no início e inclina-se enquanto cai, porque sua velocidade faz o mesmo:
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (rb.linearVelocity != Vector3.zero)
{
transform.rotation = Quaternion.LookRotation(rb.linearVelocity);
}
}Só a direção importa, não o comprimento: (1, 0, 2) e (3, 0, 6) dão a mesma rotação. Um vetor nulo não tem direção, então LookRotation(Vector3.zero) registra Look rotation viewing vector is zero e retorna Quaternion.identity, que faz o objeto apontar para +z. Por isso a flecha verifica primeiro: quando ela para, mantém a orientação que tinha. LookAt(target.position) dá a mesma rotação que LookRotation(target.position - transform.position).
A componente para cima ou para baixo da direção inclina o eixo para a frente para cima ou para baixo junto com ela. Para algo que precisa permanecer na vertical, como um personagem caminhando por uma ladeira, defina primeiro o y da direção como 0, para que o objeto gire apenas em torno de y. Um segundo argumento, LookRotation(direction, Vector3.up), indica qual direção é para cima; Vector3.up é o valor usado quando ele não é informado.
Desafio
MédioA abelha voa de flor em flor. O script pronto Mover faz com que ela voe em linhas retas, subindo ou mergulhando pelo caminho, e a mantém parada por 1 segundo em cada flor; deixe Mover como está. Escreva FaceMotion para que a abelha fique voltada para a direção em que voa:
- Ela fica voltada para a direção em que se moveu desde o último quadro, vista de cima.
- Ela permanece na posição vertical: sem apontar o nariz para cima ou para baixo enquanto sobe ou mergulha.
- Enquanto está parada, ela mantém a orientação que tinha, e nada é registrado.
O código vai em LateUpdate(), então Mover já moveu a abelha neste quadro. Pressione Jogar e, em seguida, Verificar.
Experimente você mesmo
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// Vire para a direção em que a abelha se moveu desde o último quadro.
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Física e jogabilidade
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para Coletar