Ruota in modo fluido
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 43 di 63.
Impostare direttamente transform.rotation su una nuova rotazione fa ruotare un oggetto in un singolo fotogramma. Quaternion.RotateTowards(current, goal, maxDegrees) restituisce current ruotato verso goal al massimo di maxDegrees, senza mai superare l'obiettivo. Usando turnSpeed * Time.deltaTime come passo, l'oggetto ruota a velocità costante e si ferma esattamente sul suo obiettivo, proprio come fa MoveTowards per le posizioni. Questo girasole segue il sole a 30 gradi al secondo:
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 il sole è a 90 gradi di distanza, il girasole impiega 3 secondi, ruotando di 30 gradi alla volta. Ruota per la via più breve e l'obiettivo viene ricalcolato a ogni fotogramma, quindi segue anche un sole in movimento.
Quaternion.Slerp(a, b, t) è la rotazione a una frazione t del percorso da a a b, proprio come Vector3.Lerp per i punti. Scritto come Slerp(transform.rotation, goal, 5f * Time.deltaTime) in Update(), ruota di una parte dell'angolo rimanente a ogni fotogramma: rapidamente all'inizio, sempre più lentamente vicino all'obiettivo, mai a velocità costante e senza mai raggiungerlo del tutto. Questa accelerazione e decelerazione è adatta a una telecamera o a una testa che ruota. Quando la velocità di rotazione è una regola del gioco, come per un cannone che ruota di 60 gradi al secondo, usa RotateTowards.
Sfida
MedioIl gufo si gira a guardare nella direzione in cui lo punti. Ogni freccia gli assegna una nuova direzione verso cui guardare: in alto +z, a destra +x, in basso -z, a sinistra -x. Quando premi un tasto, inizia a girarsi verso quella direzione a turnSpeed (180) gradi al secondo, a velocità costante, e completa la rotazione anche dopo che hai rilasciato il tasto, fermandosi esattamente nella nuova direzione.
Premi Play, premi i tasti freccia, poi Check.
Provalo tu
using UnityEngine;
public class Owl : MonoBehaviour
{
public float turnSpeed = 180f;
void Update()
{
// Su, destra, giù, sinistra: ruota per guardare verso +z, +x, -z, -x alla velocità di turnSpeed gradi al secondo.
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fisica e gameplay
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia7Rotazione
Angoli di EuleroQuaternioniGuarda nella direzione in cui ti muoviRuota in modo fluidoRiepilogo: Torretta2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliere