Gire suavemente
Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 43 de 63.
Definir transform.rotation diretamente para uma nova rotação faz um objeto girar em um único quadro. Quaternion.RotateTowards(current, goal, maxDegrees) retorna current girado em direção a goal em, no máximo, maxDegrees, sem nunca ultrapassar o objetivo. Usando turnSpeed * Time.deltaTime como incremento, o objeto gira a uma velocidade constante e para exatamente no objetivo, assim como MoveTowards faz com posições. Este girassol acompanha o sol a 30 graus por segundo:
public Transform sun;
public float turnSpeed = 30f;
void Update()
{
Quaternion goal = Quaternion.LookRotation(sun.position - transform.position);
transform.rotation = Quaternion.RotateTowards(transform.rotation, goal, turnSpeed * Time.deltaTime);
}Se o sol estiver a 90 graus de distância, o girassol leva 3 segundos, girando 30 graus a cada segundo. Ele gira pelo caminho mais curto, e o objetivo é calculado novamente a cada quadro, então acompanha um sol em movimento.
Quaternion.Slerp(a, b, t) é a rotação que corresponde a uma fração t do caminho de a a b, assim como Vector3.Lerp faz com pontos. Escrito como Slerp(transform.rotation, goal, 5f * Time.deltaTime) em Update(), ele gira uma parte do ângulo restante a cada quadro: rapidamente no início, cada vez mais devagar ao se aproximar do objetivo, nunca a uma velocidade fixa e sem nunca chegar por completo. Essa desaceleração é adequada para uma câmera ou para uma cabeça girando. Quando a velocidade de rotação é uma regra do jogo, como um canhão que gira 60 graus por segundo, use RotateTowards.
Desafio
MédioA coruja vira para olhar na direção para a qual você aponta. Cada seta indica uma nova direção para a qual ela deve olhar: para cima +z, para a direita +x, para baixo -z, para a esquerda -x. Ao pressionar uma tecla, ela começa a virar nessa direção a turnSpeed (180) graus por segundo, em uma velocidade constante, e termina a rotação mesmo depois que a tecla é solta, parando exatamente na nova direção.
Pressione Jogar, pressione as setas e, em seguida, Verificar.
Experimente você mesmo
using UnityEngine;
public class Owl : MonoBehaviour
{
public float turnSpeed = 180f;
void Update()
{
// Cima, direita, baixo, esquerda: gire para ficar voltado para +z, +x, -z, -x a turnSpeed graus por segundo.
}
}
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