Menu
CoddyTech

Strefy śmierci

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

Strefa śmierci to obszar z wyzwalaczem, do którego gracz nie może dotrzeć: lawa, kolce lub pusta przestrzeń pod poziomem. Wejście do niej odsyła gracza do punktu odrodzenia. W tym przypadku robi to własny skrypt lawy, a punkt odrodzenia jest ustawiony w polu Transform w Inspektorze:

public Transform spawnPoint;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        other.transform.position = spawnPoint.position;
        other.attachedRigidbody.linearVelocity = Vector3.zero;
    }
}

other.attachedRigidbody to Rigidbody, do którego należy wchodzący w obszar collider. Ustawienie transform.position teleportuje gracza, czego wymaga odrodzenie. Rigidbody zachowuje jednak prędkość podczas skoku: gracz, który wpadł z prędkością 10 jednostek na sekundę, pojawi się w punkcie odrodzenia, nadal spadając z prędkością 10, a ten, który wbiegł w lawę, będzie dalej biegł prosto z powrotem do niej. Ustawienie linearVelocity na Vector3.zero sprawia, że gracz pojawia się nieruchomo. Sprawdzenie tagu pozostawia wszystko inne, co wpadnie do lawy, na miejscu.

challenge icon

Wyzwanie

Łatwy

Gracz przechodzi przez wąski most nad przepaścią, popychany siłami sterowanymi klawiszami strzałek; ta część jest już napisana. Wyzwalacz oznaczony tagiem KillZone wypełnia przestrzeń poniżej, a flaga oznaczona tagiem Checkpoint, również będąca wyzwalaczem, stoi w połowie mostu. Dodaj do skryptu gracza punkty odradzania:

  • Gdy gra się rozpoczyna, punktem odradzania jest miejsce, w którym stoi gracz.
  • Dotknięcie Checkpoint sprawia, że pozycja gracza w danej chwili staje się nowym punktem odradzania.
  • Wejście w KillZone przenosi gracza z powrotem do punktu odradzania, gdzie stoi nieruchomo.

Naciśnij Play i zejdź z mostu, a następnie Check.

Spróbuj swoich sił

using UnityEngine;

public class Player : MonoBehaviour
{
    public float force = 12f;
    Rigidbody body;
    Vector3 input;
    // respawn: miejsce, w którym gracz pojawia się ponownie

    void Start()
    {
        body = GetComponent<Rigidbody>();
    }

    void Update()
    {
        input = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
    }

    void FixedUpdate()
    {
        body.AddForce(input * force);
    }

    // Checkpoint: zapamiętaj położenie gracza. KillZone: wróć w to miejsce i zatrzymaj się.
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Fizyka i rozgrywka