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.
Wyzwanie
ŁatwyGracz 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.csdodaj publiczną metodęint AddAmmo(int amount). Pobiera ona tyle zamount, ile można dodać, nie przekraczającmaxAmmo, zapisuje nową łączną wartość, na przykładAmmo: 7, i zwraca pobraną ilość. - W pliku
AmmoCrate.cs, gdy gracz wchodzi w skrzynię, przekaż Blasterowi wartośćamountze 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
}
}
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