Menu
CoddyTech

Strefy śmierci

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

Strefa śmierci to obszar wyzwalający, 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 skrypt samej lawy, a punkt odrodzenia znajduje się w polu Transform ustawionym w Inspectorze:

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 collider. Ustawienie transform.position teleportuje gracza, czego wymaga odrodzenie. Rigidbody zachowuje jednak swoją prędkość podczas skoku: gracz, który spadł z prędkością 10 jednostek na sekundę, dotrze do punktu odrodzenia i nadal będzie spadać z prędkością 10, a ten, który wbiegł w lawę, będzie biegł dalej i wpadnie w nią prosto z powrotem. Ustawienie linearVelocity na Vector3.zero sprawia, że gracz pojawia się na miejscu nieruchomo. Sprawdzenie tagu sprawia, że wszystko inne, co wpadnie do lawy, pozostaje tam, gdzie jest.

challenge icon

Wyzwanie

Łatwy

Dodaj odradzanie się gracza. Ten skrypt znajduje się na graczu, więc zmienia położenie transform i body, a nie other.

  1. W Start() ustaw pole Vector3 respawn na transform.position.
  2. W OnTriggerEnter(Collider other), gdy other.CompareTag("Checkpoint"), ustaw respawn = transform.position;.
  3. Gdy other.CompareTag("KillZone"), ustaw transform.position = respawn; oraz body.linearVelocity = Vector3.zero;.

Naciśnij „Graj” i zejdź z mostu. Następnie naciśnij „Sprawdź”.

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, gdzie znajduje się gracz. KillZone: wróć w to miejsce i zatrzymaj się.
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity