Zdrowie i obrażenia
Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 55 z 71.
Do zadawania obrażeń potrzebne są dwa skrypty. Skrypt Health znajduje się na każdym obiekcie, który może zostać uszkodzony, i przechowuje jego punkty życia, a obiekt zadający obrażenia wyszukuje ten skrypt i wywołuje jego metodę. Oto skrypt Health skrzyni, która rozpada się po trzech trafieniach, oraz kolców, które ranią wszystko, co na nie spadnie:
public class Health : MonoBehaviour
{
[SerializeField] private int hp = 3;
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0)
{
Destroy(gameObject);
}
}
}public class Spikes : MonoBehaviour
{
void OnCollisionEnter(Collision collision)
{
Health health = collision.gameObject.GetComponent<Health>();
if (health != null)
{
health.TakeDamage(1);
}
}
}TakeDamage jest public, więc inne skrypty mogą ją wywoływać, i to jedyny kod, który zmienia wartość hp. Kolce, pociski i lawa wywołują tę samą metodę, a sam skrypt Health decyduje, co oznacza wartość 0: zniszczyć skrzynię, zakończyć grę czy odtworzyć animację śmierci. Każdy skrypt znajduje się w osobnym pliku o nazwie takiej jak jego klasa.
GetComponent<Health>() zwraca null dla obiektów, które nie mają komponentu Health, takich jak podłoga, więc kolce sprawdzają to przed wywołaniem metody. TryGetComponent(out Health health) wyszukuje komponent i sprawdza jego obecność w jednym wywołaniu: zwraca true i przypisuje wartość do health tylko wtedy, gdy taki komponent istnieje.
Wyzwanie
ŚredniSpraw, by trafienia miały znaczenie. Bullet jest gotowy i wywołuje TakeDamage(2) na tym, w co trafi.
- W
HealthuzupełnijTakeDamage(int amount): odejmij odhpwartośćMathf.Max(amount - armor, 1). - Zaloguj
name + " hp: " + hp, na przykładDummy hp: 2. - Gdy
hp <= 0, wywołajDestroy(gameObject);.
Naciśnij „Graj” i strzel do manekina dwa razy: pojawi się log Dummy hp: 2, a następnie manekin zniknie. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class Health : MonoBehaviour
{
[SerializeField] private int hp = 4;
[SerializeField] private int armor = 0;
public void TakeDamage(int amount)
{
// odejmij od hp amount pomniejszone o armor (co najmniej 1), wypisz, ile hp zostało, i zniszcz obiekt przy 0
}
}
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 startowa4Korutyny
WywoływanieInvokeRepeating i CancelInvokeTwoja pierwsza korutynaPętle w korutynachZatrzymywanie korutynPodsumowanie: odliczanie10Projekt: Ucieczka z areny
ArenaŁowcy2Kolizje
OnCollisionEnterW co uderzyłem?Rozbijanie przy zderzeniuStanie na podłożuOdbicie i tarcieKształty colliderówPodsumowanie: Zniszczalny mur5Projekt: Wyścig po monety
Tocząca się piłkaZbieranie monet3Wyzwalacze
Kolizje wyzwalająceOnTriggerEnterPrzedmioty do zebraniaSkrzynie zatrzymują resztęStrefy śmierciWejście i wyjściePodsumowanie: klucz i drzwi6Raycasty
Physics.RaycastRaycastHitSprawdzanie podłoża za pomocą promieniaWarstwy i LayerMaskLinia widzeniaOverlapSphere i SphereCastPodsumowanie: laserowa bariera9Wrogowie
Gonienie graczaPościg w zasięguPatrol i pościgZdrowie i obrażeniaPociski, które trafiająOdrzutPodsumowanie: Pies stróżującyPoćwicz samodzielnie: Edytor online Unity