Kamera orbitalna
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 46 z 63.
Aby krążyć wokół punktu, przechowuj kąt, obróć o niego stałe przesunięcie i dodaj wynik do punktu. Mnożenie wektora przez rotację powoduje jego 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 nad nim i 6 jednostek od niego:
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 kącie 90 wynosi (-6, 3, 0), czyli kamera znajduje się po stronie -x posągu, a przy kącie 180 wynosi (0, 3, 6), czyli kamera znajduje się przed nim. Przesunięcie kamery nie obraca jej, dlatego LookAt kieruje ją z powrotem na posąg z każdego nowego miejsca.
Kąt przechowujesz 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 ograniczyć jego zakres lub zmieniać go z klawiatury. Wykonanie tego w LateUpdate() umieszcza kamerę po tym, jak posąg lub gracz poruszył się w danej klatce.
Wyzwanie
ŚredniPozwól graczowi latać kamerą wokół wieży, zawsze w odległości distance (8) jednostek od pozycji wieży i zawsze patrząc na nią. Skrypt przechowuje dwa kąty w zmiennych yaw i pitch:
yawokreśla, jak daleko kamera obróciła się wokół wieży. Strzałka w prawo zwiększa tę wartość, a strzałka w lewo ją zmniejsza z prędkościąturnSpeed(90) stopni na sekundę. Przy yaw równym 0 kamera znajduje się po stronie -z wieży; przy yaw równym 90 — po stronie -x.pitchokreśla, o ile stopni kamera znajduje się powyżej poziomu wieży, patrząc z jej perspektywy. Strzałka w górę zwiększa tę wartość, a strzałka w dół ją zmniejsza z prędkościątiltSpeed(45) stopni na sekundę; wartość pozostaje w zakresie od 10 do 60.
Na początku yaw wynosi 0, a pitch 30, co umieszcza kamerę 4 jednostki powyżej pozycji wieży i 6.93 jednostki za nią. Naciśnij Play, polataj wokół, a następnie naciśnij Check.
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.
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
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 startowa2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur