Strzelaj
Lekcja 9 z 18 w kursie Gra Unity: Obrona wieżowa w Coddy.
Wieża strzela do celu fireRate razy na sekundę. Zamiast używać zegara odliczającego czas, wieża zapamiętuje czas następnego strzału: gdy Time.time osiągnie tę wartość, wieża strzela i przesuwa ją o 1f / fireRate sekundy. Zraszacz, który zrasza dwa razy na sekundę:
if (Time.time >= nextSpray)
{
Spray();
nextSpray = Time.time + 1f / spraysPerSecond;
}Każdy strzał to Projectile, który leci do celu za pomocą MoveTowards, podążając za nim, gdy ten idzie, i raniąc go po dotarciu. Nie musi wiedzieć, że trafił w Enemy: pyta cel o IDamageable, czyli interfejs dla wszystkiego, co może otrzymywać obrażenia, opisany w rozdziale o interfejsach. Dzięki temu można strzelać do wszystkiego, co go implementuje.
Cel może zginąć, gdy strzał jest jeszcze w locie, pokonany strzałem z innej wieży. target tego strzału porównuje się wtedy jako null, tak jak każdy zniszczony obiekt Unity, a strzał nie ma już dokąd lecieć, więc niszczy sam siebie.
Wyzwanie
ŚredniIDamageabledeklarujevoid TakeDamage(int amount). Spraw, abyEnemyimplementował ten interfejs: podana wartość jest odejmowana od jego zdrowia, a gdy wynosi 0 lub mniej, przeciwnik zostaje zniszczony.- W
Projectiledodaj serializowaną liczbę zmiennoprzecinkowąspeed(prefab ustawia ją na 12) orazpublic void Launch(Transform target, int damage), które zapamiętuje obie wartości. WUpdateporuszaj się w stronę celu z prędkościąspeed; po dotarciu wywołajTakeDamage(damage)na jego IDamageable i zniszcz pocisk. Gdy cel zniknie, zniszcz pocisk. - W
Towerdodaj publiczną liczbę całkowitądamage, publiczną liczbę zmiennoprzecinkowąfireRate(strzały na sekundę) oraz serializowaneprojectilePrefab(obiekt Projectile). Gdy wieża ma cel, strzelaj z częstotliwością nie większą niżfireRaterazy na sekundę: utwórz pocisk nieco przed głowicą, w miejscuhead.position + head.forward * 0.6f, i wystrzel go w stronę celu, zadając obrażenia równe wartości damage wieży.
Prefab ArrowTower ustawia wartość damage na 2, a fireRate na 1.5; jego pociskiem jest ArrowShot. Naciśnij Play, zbuduj wieże i powstrzymaj pierwszą falę, a następnie kliknij Check.
Spróbuj swoich sił
using UnityEngine;
// Pojawi się później: pocisk lecący z wieży do celu.
public class Projectile : MonoBehaviour
{
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.