Tower Defense Lite
Część sekcji Architektura gier w Unity ścieżki Unity w Coddy. Lekcja 61 z 64.
Stwory maszerują drogą w kierunku twojej bazy, a broni jej jedna wieża. Wieża strzela pociskami do najbliższego stwora, gdy ten znajduje się w zasięgu, a za każdego pokonanego stwora otrzymujesz złoto. Wydaj złoto klawiszem spacji na kolejny poziom wieży: z każdym poziomem wieża sięga dalej, strzela szybciej lub zadaje większe obrażenia. Stwór, który dotrze do bazy, przedostaje się do niej. Poziomy to dane gry, które projektant dostosowuje w zasobie bez modyfikowania kodu. Wieża wystrzeliwuje wiele pocisków, dlatego używa ich ponownie z puli zamiast tworzyć i niszczyć pocisk przy każdym strzale.
Napisz dwa skrypty: TowerData, typ zasobu, oraz Tower. Skrypty Creep, Bolt i CreepSpawner są gotowe, podobnie jak metody wieży Nearest i Show.
Wyzwanie
TrudnyDokończ wieżę; Nearest(range) i Show() są gotowe.
TowerLevel: serializowalna klasa z publicznymi polamirange,fireEvery,damage,cost.TowerDataprzechowujepublic List<TowerLevel> levels.- Co
fireEverysekund, jeśliNearest(range)znajdzie stwora, wystrzel pocisk zObjectPool<Bolt>z wieży:bolt.Launch(creep, damage, pool.Release). Show()po zdarzeniuCreep.Killedprzyznajebounty, a po naciśnięciu spacji kupuje kolejny poziom za jegocost, zapisując w loguTower level 2.
Naciśnij „Graj” i ulepsz wieżę. Następnie naciśnij „Sprawdź”.
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;
// Gotowe: creep najbliższy wieży w zasięgu lub null.
Creep Nearest(float range)
{
Creep nearest = null;
float best = Mathf.Infinity;
foreach (Collider hit in Physics.OverlapSphere(transform.position, range))
{
if (hit.TryGetComponent(out Creep creep))
{
float distance = Vector3.Distance(transform.position, creep.transform.position);
if (distance < best)
{
best = distance;
nearest = creep;
}
}
}
return nearest;
}
// Gotowe: wyświetla poziom i ilość złota, na przykład Level 1, 0 gold.
void Show()
{
infoText.text = "Level " + (level + 1) + ", " + gold + " gold";
}
}
Wszystkie lekcje w sekcji Architektura gier w Unity
1Komponenty, nie hierarchie
Małe komponentyBazowy skrypt przeciwnikaKomponenty abstrakcyjneWspółpracujące komponentyPowtórka: modułowa wieżyczkaPowtórka: podwójne działo4Dane serializowane
Klasy serializowalneListy w InspectorzeEnumy w InspectorzePodsumowanie: tabela łupówPodsumowanie: losowanie łupów2Interfejsy w Unity
IDamageableInterfejsy i TryGetComponentGetComponentsPowtórka: klawisz interakcjiPowtórka: najbliższy w zasięgu5ScriptableObjects
Zasoby danychStatystyki broniWspółdzielone ustawieniaOcal wiatrFale jako danePowtórka: Baza przedmiotówPowtórka: Kupowanie w sklepie8Kod wielokrotnego użytku
Metody rozszerzająceGeneryczny singletonGeneryczne metody pomocniczePodsumowanie: FindNearestPoćwicz samodzielnie: Edytor online Unity