Menu
CoddyTech

Znajdźki

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

Znajdźka to wyzwalacz z własnym skryptem. Gdy coś do niego wchodzi, znajdźka sprawdza, czy to gracz, przekazuje mu swój efekt i niszczy samą siebie. Skrypt gracza przechowuje wynik i udostępnia do tego publiczną metodę. Ta apteczka leczy wszystko, co ma skrypt Health:

// HealthPack.cs
public int amount = 25;

void OnTriggerEnter(Collider other)
{
    if (other.TryGetComponent(out Health health) && health.hp < 100)
    {
        health.Heal(amount);
        Destroy(gameObject);
    }
}
// Health.cs, na graczu
public int hp = 50;

public void Heal(int amount)
{
    hp = Mathf.Min(hp + amount, 100);
    Debug.Log("HP: " + hp);
}

other.TryGetComponent(out Health health) zwraca false, gdy do apteczki wślizguje się skrzynia, więc może ją podnieść tylko obiekt ze skryptem Health, a gracz z pełnym zdrowiem zostawia apteczkę na później. Apteczka odnajduje gracza za pośrednictwem other, więc nie trzeba przypisywać jej odwołania w Inspectorze, a poziom może zawierać ich pięćdziesiąt. Heal jest public, ponieważ wywołuje ją inny skrypt, a limit 100 znajduje się w Health — jedynym miejscu, które zarządza hp. Destroy(gameObject) usuwa apteczkę; Destroy(other.gameObject) usunęłoby gracza.

challenge icon

Wyzwanie

Łatwy

Gracz ma Blaster: ammo (4 na początku) i maxAmmo (10). Strzałki poruszają graczem, a klawisz spacji oddaje strzał — oba elementy są już zapisane. Spraw, aby skrzynie z amunicją uzupełniały zapas:

  • W pliku Blaster.cs dodaj publiczną metodę int AddAmmo(int amount). Pobiera ona tyle z amount, ile można dodać, nie przekraczając maxAmmo, zapisuje nową łączną wartość, na przykład Ammo: 7, i zwraca pobraną ilość.
  • W pliku AmmoCrate.cs, gdy gracz wchodzi w skrzynię, przekaż Blasterowi wartość amount ze skrzyni i odejmij pobraną ilość. Pusta skrzynia zostaje usunięta; skrzynia, w której została amunicja, pozostaje z pozostałą ilością do następnej wizyty.

W pierwszej skrzyni jest 3, a w drugiej 5. Naciśnij Play, idź w prawo, oddaj kilka strzałów i wróć do drugiej skrzyni, a następnie naciśnij Check.

Spróbuj swoich sił

using UnityEngine;

public class AmmoCrate : MonoBehaviour
{
    public int amount = 3;

    void OnTriggerEnter(Collider other)
    {
        // Blaster gracza zabiera tyle, ile może pomieścić; skrzynka zachowuje resztę i znika, gdy jest pusta
    }
}
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