Menu
CoddyTech

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.

challenge icon

Desafio

Médio

A 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.
    }
}
quiz iconTeste seus conhecimentos

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