Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni
  1. IDamageable deklaruje void TakeDamage(int amount). Spraw, aby Enemy implementował ten interfejs: podana wartość jest odejmowana od jego zdrowia, a gdy wynosi 0 lub mniej, przeciwnik zostaje zniszczony.
  2. W Projectile dodaj serializowaną liczbę zmiennoprzecinkową speed (prefab ustawia ją na 12) oraz public void Launch(Transform target, int damage), które zapamiętuje obie wartości. W Update poruszaj się w stronę celu z prędkością speed; po dotarciu wywołaj TakeDamage(damage) na jego IDamageable i zniszcz pocisk. Gdy cel zniknie, zniszcz pocisk.
  3. W Tower dodaj publiczną liczbę całkowitą damage, publiczną liczbę zmiennoprzecinkową fireRate (strzały na sekundę) oraz serializowane projectilePrefab (obiekt Projectile). Gdy wieża ma cel, strzelaj z częstotliwością nie większą niż fireRate razy na sekundę: utwórz pocisk nieco przed głowicą, w miejscu head.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
{
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra Unity: Obrona wieżowa