Obracaj się płynnie
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 45 z 71.
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 nie przekracza celu. Gdy krokiem jest turnSpeed * Time.deltaTime, obiekt obraca się ze stałą szybkością i zatrzymuje dokładnie na celu, tak jak MoveTowards w przypadku pozycji. Ten słonecznik podąża za słońcem z szybkoś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łonecznik potrzebuje 3 sekund, by obrócić się do słońca oddalonego o 90 stopni — po 30 stopni na sekundę. Obraca się krótszą drogą, a cel jest wyznaczany ponownie w każdej klatce, dzięki czemu podąża za poruszającym się słońcem.
Quaternion.Slerp(a, b, t) to rotacja znajdująca się w ułamku drogi t od a do b, tak jak Vector3.Lerp wyznacza punkt między punktami. Zapisane w Update() jako Slerp(transform.rotation, goal, 5f * Time.deltaTime), obraca o część pozostałego kąta w każdej klatce: na początku szybko, a w pobliżu celu coraz wolniej; nigdy ze stałą szybkością i nigdy nie docierając do celu. Takie płynne zwalnianie sprawdza się przy obracaniu kamery lub głowy. Gdy szybkość obrotu jest regułą gry, na przykład armata obraca się o 60 stopni na sekundę, użyj RotateTowards.
Wyzwanie
ŚredniSpraw, by sowa płynnie obracała się w kierunku wskazywanym przez każdą strzałkę.
- Dodaj
Quaternion goal;i ustaw ją natransform.rotationwStart(). - Po
Input.GetKeyDowndla każdej strzałki ustawgoal, na przykładgoal = Quaternion.LookRotation(Vector3.right);: góra +z, prawo +x, dół -z, lewo -x. - W każdej klatce ustaw
transform.rotation = Quaternion.RotateTowards(transform.rotation, goal, turnSpeed * Time.deltaTime);.
Naciśnij „Graj” i naciskaj strzałki. Następnie naciśnij „Sprawdź”.
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ę.
}
}
Wszystkie lekcje w sekcji Fizyka i rozgrywka
1Ciało sztywne
Grawitacja i masaPopychanie za pomocą AddForceSkok z impulsemFixedUpdate dla fizykiPrędkośćCiała kinematycznePowtórka: platforma startowa4Korutyny
WywoływanieInvokeRepeating i CancelInvokeTwoja pierwsza korutynaPętle w korutynachZatrzymywanie korutynPodsumowanie: odliczanie10Projekt: Ucieczka z areny
ArenaŁowcy2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur5Projekt: Wyścig po monety
Tocząca się piłkaZbieranie monet3Wyzwalacze
Kolizje wyzwalająceOnTriggerEnterPrzedmioty do zebraniaSkrzynie zatrzymują resztęStrefy śmierciWejście i wyjściePodsumowanie: klucz i drzwiPoćwicz samodzielnie: Edytor online Unity