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.
Wyzwanie
ŁatwyGracz 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
Checkpointsprawia, że pozycja gracza w danej chwili staje się nowym punktem odradzania. - Wejście w
KillZoneprzenosi 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ę.
}
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