Menu
CoddyTech

Gira suavemente

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 43 de 63.

Asignar transform.rotation directamente a una nueva rotación hace que un objeto gire en un solo fotograma. Quaternion.RotateTowards(current, goal, maxDegrees) devuelve current girado hacia goal como máximo maxDegrees, sin sobrepasar nunca el objetivo. Si se usa turnSpeed * Time.deltaTime como paso, el objeto gira a una velocidad constante y se detiene exactamente en su objetivo, igual que hace MoveTowards con las posiciones. Este girasol sigue al sol a 30 grados 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);
}

Si el sol está a 90 grados, el girasol tarda 3 segundos, girando 30 grados cada uno. Gira por el camino más corto y el objetivo se vuelve a calcular en cada fotograma, así que sigue a un sol en movimiento.

Quaternion.Slerp(a, b, t) es la rotación que está a una fracción t del recorrido de a a b, igual que Vector3.Lerp para los puntos. Escrito como Slerp(transform.rotation, goal, 5f * Time.deltaTime) en Update(), gira una parte del ángulo restante en cada fotograma: rápido al principio, cada vez más despacio cerca del objetivo, nunca a una velocidad fija y sin llegar nunca del todo. Esa suavidad es adecuada para una cámara o para girar la cabeza. Cuando la velocidad de giro sea una regla del juego, como en un cañón que gira 60 grados por segundo, usa RotateTowards.

challenge icon

Desafío

Intermedio

El búho gira para mirar hacia donde lo apuntes. Cada flecha le da una nueva dirección hacia la que mirar: arriba +z, derecha +x, abajo -z, izquierda -x. Al pulsarla, empieza a girar hacia esa dirección a turnSpeed (180) grados por segundo, a un ritmo constante, y termina el giro incluso después de soltar la tecla, deteniéndose exactamente en la nueva dirección.

Pulsa Play, pulsa las flechas y, después, Check.

Pruébalo tú mismo

using UnityEngine;

public class Owl : MonoBehaviour
{
    public float turnSpeed = 180f;

    void Update()
    {
        // Arriba, derecha, abajo, izquierda: gira para orientarte hacia +z, +x, -z, -x a turnSpeed grados por segundo.
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Física y jugabilidad