Lekka gra Tower Defense
Część sekcji Architektura gier w Unity ścieżki Unity w Coddy. Lekcja 48 z 50.
Stwory maszerują drogą w kierunku twojej bazy, a broni jej pojedyncza wieża. Wieża strzela pociskami do najbliższego stwora, gdy tylko znajdzie się on w zasięgu, a za każdego pokonanego stwora otrzymujesz złoto. Spacja wydaje złoto na kolejny poziom wieży: z każdym poziomem wieża ma większy zasięg, strzela szybciej lub zadaje większe obrażenia. Stwór, który dotrze do bazy, przedostaje się do niej. Poziomy są danymi gry, które projektant dostosowuje w zasobie bez dotykania kodu, a wieża wystrzeliwuje wiele pocisków, więc ponownie wykorzystuje je z puli zamiast tworzyć i niszczyć pocisk przy każdym strzale.
Napisz dwa skrypty: TowerData, typ zasobu, oraz Tower. Creep, Bolt i CreepSpawner są już gotowe.
Wyzwanie
TrudnyInspektor przekazuje Tower data (zasób Arrow), boltPrefab i infoText. Odczytaj klawisz spacji za pomocą Keyboard.current z Input System.
- W pliku
TowerData.cs: klasaTowerLevel, którą Inspektor może wyświetlić, z polamipublic float range,public float fireEvery,public int damageipublic int cost(koszt osiągnięcia danego poziomu), orazTowerData— ScriptableObject z pozycją w menu Create i polempublic List<TowerLevel> levels. Zasób Arrow zawiera trzy poziomy: zasięg 4, odstęp 1 s, obrażenia 1, koszt 0; zasięg 5, odstęp 0.6 s, obrażenia 1, koszt 6; zasięg 6, odstęp 0.4 s, obrażenia 2, koszt 12. - Wieża zaczyna na pierwszym poziomie z 0 sztukami złota, a
infoTextwyświetla oba te elementy jakoLevel 1, 0 goldza każdym razem, gdy ulegną zmianie. - Gdy minie liczba sekund określona przez
fireEverydla danego poziomu od ostatniego strzału, a pełzacz znajdzie się w zasięgu (jego collider będzie się znajdował w odległości mniejszej niżrangeod wieży, zgodnie z wynikiem działaniaPhysics.OverlapSphere), wieża strzela do najbliższego pełzacza. Pobiera pocisk z puliObjectPool<Bolt>, umieszcza go przy wieży i wywołujebolt.Launch(creep, damage, pool.Release): gdy pocisk skończy, wywoła ostatni argument, który zwróci go do puli. Pocisk jest dezaktywowany, gdy czeka w puli, i aktywowany, gdy zostaje z niej pobrany. - Każdy pełzacz, który zginie, wypłaca swoją wartość
bountyw sztukach złota: nasłuchuj statycznego zdarzeniaCreep.Killed. - Spacja kupuje kolejny poziom, jeśli taki istnieje i ilość złota pokrywa jego
cost: koszt jest odejmowany od ilości złota, a wieża awansuje i zapisuje to w logu jakoTower level 2. W przeciwnym razie naciśnięcie spacji nic nie robi.
Naciśnij Play, obserwuj drogę i ulepszaj wieżę, a następnie kliknij Check.
Spróbuj swoich sił
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Pool;
using TMPro;
public class Tower : MonoBehaviour
{
[SerializeField] private TowerData data;
[SerializeField] private Bolt boltPrefab;
[SerializeField] private TMP_Text infoText;
private int level;
private int gold;
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Architektura gier w Unity
1Komponenty, nie hierarchie
Małe komponentyPodstawowy skrypt przeciwnikaKomponenty abstrakcyjneWspółpracujące komponentyPodsumowanie: modułowa wieżyczka4Dane serializowane
Klasy serializowalneListy w InspectorzeWyliczenia w InspectorzePodsumowanie: tabela łupów10Projekt: Arena przetrwania
BohaterTypy wrogów2Interfejsy w Unity
IDamageableInterfejsy i TryGetComponentGetComponentsPodsumowanie: klawisz interakcji5ScriptableObjects
Zasoby danychStatystyki broniWspółdzielone ustawieniaFale jako danePowtórka: baza danych przedmiotów8Kod wielokrotnego użytku
Metody rozszerzająceGeneryczny singletonGeneryczne metody pomocniczePodsumowanie: FindNearest