Menu
CoddyTech

Obracaj się płynnie

Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 43 z 63.

Ustawienie transform.rotation bezpośrednio na nową rotację obraca obiekt w jednej klatce. Quaternion.RotateTowards(current, goal, maxDegrees) zwraca current obrócone w stronę goal o maksymalnie maxDegrees i nigdy dalej niż do celu. Przy kroku równym turnSpeed * Time.deltaTime obiekt obraca się ze stałą prędkością i zatrzymuje dokładnie w celu, tak jak MoveTowards w przypadku pozycji. Ten słonecznik podąża za słońcem z prędkością 30 stopni na sekundę:

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);
}

Słońce oddalone o 90 stopni sprawia, że słonecznik obraca się przez 3 sekundy, po 30 stopni w każdej. Obraca się krótszą drogą, a cel jest wyznaczany ponownie w każdej klatce, więc słonecznik podąża za poruszającym się słońcem.

Quaternion.Slerp(a, b, t) to rotacja o ułamek t drogi od a do b, tak jak Vector3.Lerp w przypadku punktów. Zapisana w Update() jako Slerp(transform.rotation, goal, 5f * Time.deltaTime), obraca o część pozostałego kąta w każdej klatce: najpierw szybko, a w pobliżu celu coraz wolniej; nigdy ze stałą prędkością i nigdy nie docierając do celu całkowicie. Takie łagodne zwalnianie sprawdza się przy obracaniu kamery lub głowy. Gdy prędkość obrotu jest regułą gry, na przykład gdy działo obraca się o 60 stopni na sekundę, użyj RotateTowards.

challenge icon

Wyzwanie

Średni

Sowa obraca się, aby spojrzeć w kierunku, który wskazujesz. Każda strzałka wyznacza nowy kierunek, w którym ma być zwrócona: góra +z, prawo +x, dół -z, lewo -x. Po naciśnięciu klawisza zaczyna obracać się w tym kierunku z prędkością turnSpeed (180) stopni na sekundę, w stałym tempie, i kończy obrót nawet po zwolnieniu klawisza, zatrzymując się dokładnie w nowym kierunku.

Naciśnij Play, naciśnij klawisze strzałek, a następnie Check.

Spróbuj swoich sił

using UnityEngine;

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

    void Update()
    {
        // Góra, prawo, dół, lewo: obracaj się w kierunku +z, +x, -z, -x z prędkością turnSpeed stopni na sekundę.
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Fizyka i rozgrywka