Kamera orbitalna
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 48 z 71.
Aby krążyć wokół punktu, przechowuj kąt, obracaj o niego stałe przesunięcie i dodawaj wynik do punktu. Mnożenie obrotu przez wektor wykonuje obrót: Quaternion.Euler(0, angle, 0) * offset obraca przesunięcie wokół osi y, a jego długość i wysokość pozostają takie same. Ta kamera krąży wokół posągu z prędkością 20 stopni na sekundę, zawsze 3 jednostki w górę i 6 jednostek dalej:
public Transform statue;
public float speed = 20f;
float angle;
void LateUpdate()
{
angle += speed * Time.deltaTime;
Vector3 offset = new Vector3(0, 3, -6);
transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
transform.LookAt(statue);
}Przy kącie 0 przesunięcie wynosi (0, 3, -6), więc kamera znajduje się za posągiem. Przy 90 wynosi (-6, 3, 0), po stronie -x posągu, a przy 180 wynosi (0, 3, 6), przed nim. Przesunięcie kamery nie obraca jej, więc LookAt kieruje ją z powrotem na posąg z każdego nowego miejsca.
Drugi kąt unosi kamerę: Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) obraca kierunek do tyłu w górę o pitch (dodatni obrót wokół x kieruje (0, 0, -1) w górę), a następnie obraca go wokół osi o yaw, dzięki czemu kamera pozostaje w odległości distance pod dowolnym kątem.
Kąt jest przechowywany we własnym polu, tak jak w przypadku kątów Eulera: może przekroczyć 360 lub spaść poniżej 0 bez przeskoku, a Ty możesz go ograniczyć lub zmieniać za pomocą klawiatury. Wykonanie tego w LateUpdate() umieszcza kamerę po tym, jak posąg lub gracz poruszy się w danej klatce.
Wyzwanie
ŚredniPozwól graczowi poruszać kamerą wokół wieży.
- W
Update()strzałki w prawo i w lewo zmieniająyawz szybkościąturnSpeed, a strzałki w górę i w dół zmieniająpitchz szybkościątiltSpeed, pomnożoną przezTime.deltaTime. - Następnie pozostaw
pitch = Mathf.Clamp(pitch, 10f, 60f);. - W
LateUpdate()ustawtransform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, a następnietransform.LookAt(target);.
Naciśnij „Graj” i lataj wokół wieży. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class OrbitCamera : MonoBehaviour
{
public Transform target;
public float distance = 8f;
public float turnSpeed = 90f;
public float tiltSpeed = 45f;
public float yaw = 0f;
public float pitch = 30f;
void Update()
{
// Strzałki zmieniają yaw i pitch.
}
void LateUpdate()
{
// Umieść kamerę wokół target i skieruj ją na niego.
}
}
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