Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Spraw, by trafienia miały znaczenie. Bullet jest gotowy i wywołuje TakeDamage(2) na tym, w co trafi.

  1. W Health uzupełnij TakeDamage(int amount): odejmij od hp wartość Mathf.Max(amount - armor, 1).
  2. Zaloguj name + " hp: " + hp, na przykład Dummy hp: 2.
  3. Gdy hp <= 0, wywołaj Destroy(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

Poćwicz samodzielnie: Edytor online Unity