Arena
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 56 z 63.
W tym rozdziale zbudujesz Arena Escape. Unikasz łowców na otoczonej murem arenie, gdzie nadciągają ich kolejne fale, trzy trafienia kończą rozgrywkę, a po wyjściu ostatniej fali otwiera się wyjście. Gra składa się z pięciu skryptów, dostępnych w projekcie od samego początku: Player, Hunter, Spawner, Health i Exit. Ostatnie cztery są na razie puste, a w każdej lekcji uzupełnisz jeden z nich.
Gracz porusza się dzięki siłom, zamiast ustawiać prędkość, więc odrzut łowcy dodaje się do jego ruchu, zamiast go zerować. Samo pchnięcie sprawiałoby, że przyspieszałby bez końca, dlatego linearDamping zmniejsza jego prędkość przy każdym kroku: przy stałym pchnięciu prędkość stabilizuje się na poziomie około przyspieszenia podzielonego przez tłumienie. Ten poduszkowiec porusza się do przodu, gdy przytrzymujesz spację:
[SerializeField] private float accel = 12f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
rb.linearDamping = 2f;
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.Space))
{
rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
}
}Przy przyspieszeniu równym 12 i tłumieniu równym 2 poduszkowiec osiąga prędkość maksymalną bliską 6 jednostek na sekundę. Gdy puścisz spację, tłumienie zatrzyma go, zamiast pozwolić mu bez końca sunąć. ForceMode.Acceleration ignoruje masę, więc ciężki poduszkowiec przyspiesza dokładnie tak samo jak lekki. Collider poduszkowca ma pozbawiony tarcia PhysicsMaterial: gdyby oprócz tłumienia działało też tarcie podłoża, jego prędkość maksymalna byłaby mniejsza.
Wyzwanie
ŚredniUruchom Arena Escape z graczem. Inspector przypisuje skryptowi Player wartości accel (18) i topSpeed (6). Gracz ma masę 2 i materiał bez tarcia, a pozostałe cztery skrypty na razie pozostają puste.
- W
StartustawlinearDampingobiektu Rigidbody naaccel / topSpeed, aby prędkość gracza ustabilizowała się na poziomie okołotopSpeed. - W każdym kroku fizyki wprawiaj gracza w ruch za pomocą strzałek: w lewo i w prawo wzdłuż osi x, a w górę i w dół wzdłuż osi z, używając
ForceMode.Accelerationi przyspieszeniaaccel. - Normalizuj kierunek wskazywany przez strzałki, aby ruch po przekątnej nie był szybszy niż ruch w linii prostej.
Naciśnij Play i poruszaj się po arenie, a następnie kliknij Check.
Spróbuj swoich sił
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField] private float accel = 18f;
[SerializeField] private float topSpeed = 6f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// ustaw tłumienie, a następnie poruszaj graczem za pomocą klawiszy strzałek
}
}
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