Menu
CoddyTech

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.

challenge icon

Wyzwanie

Trudny

Inspektor przekazuje Tower data (zasób Arrow), boltPrefab i infoText. Odczytaj klawisz spacji za pomocą Keyboard.current z Input System.

  • W pliku TowerData.cs: klasa TowerLevel, którą Inspektor może wyświetlić, z polami public float range, public float fireEvery, public int damage i public int cost (koszt osiągnięcia danego poziomu), oraz TowerData — ScriptableObject z pozycją w menu Create i polem public 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 infoText wyświetla oba te elementy jako Level 1, 0 gold za każdym razem, gdy ulegną zmianie.
  • Gdy minie liczba sekund określona przez fireEvery dla 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ż range od wieży, zgodnie z wynikiem działania Physics.OverlapSphere), wieża strzela do najbliższego pełzacza. Pobiera pocisk z puli ObjectPool<Bolt>, umieszcza go przy wieży i wywołuje bolt.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ść bounty w sztukach złota: nasłuchuj statycznego zdarzenia Creep.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 jako Tower 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;
}
quiz iconSprawdź się

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