Menu
CoddyTech

Arena

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

W tym rozdziale tworzysz Arena Escape. Unikasz łowców na ogrodzonej arenie, podczas gdy nadciągają ich kolejne fale. Trzy trafienia kończą rozgrywkę, a gdy ostatnia fala zostanie pokonana, 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. Cztery ostatnie 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 po uderzeniu łowcy dodaje się do ruchu, a nie jest z niego usuwany. Samo pchnięcie przyspieszałoby gracza bez końca, dlatego linearDamping w każdym kroku odejmuje część jego prędkości: przy stałym pchnięciu prędkość ustala się na poziomie około przyspieszenia podzielonego przez tłumienie. Ta poduszkowa platforma sunie 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 platforma osiąga prędkość maksymalną bliską 6 jednostkom na sekundę. Gdy puścisz spację, tłumienie zatrzymuje ją, zamiast pozwalać jej sunąć bez końca. ForceMode.Acceleration nie uwzględnia masy, więc ciężka platforma przyspiesza dokładnie tak samo jak lekka. Collider platformy ma pozbawiony tarcia PhysicsMaterial: gdyby na tłumienie nałożyło się tarcie podłoża, jej prędkość maksymalna byłaby mniejsza.

challenge icon

Wyzwanie

Średni

Rozpocznij Arenę Ucieczki: gracz ślizga się dzięki siłom.

  1. W Start(), po linii GetComponent, ustaw rb.linearDamping = accel / topSpeed;, aby prędkość ustabilizowała się w pobliżu topSpeed.
  2. W FixedUpdate() utwórz new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).
  3. Przekaż jego normalized pomnożone przez accel do rb.AddForce z ForceMode.Acceleration.

Naciśnij „Graj” i poślizgaj się po arenie. Następnie naciśnij „Sprawdź”.

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ą strzałek
    }
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity