Kule Savunması Lite
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 61 / 64.
Creep'ler yol boyunca üssüne doğru ilerler ve üssü tek bir kule korur. Kule, menziline giren en yakın creep'e mermi atar ve indirdiği her creep altın kazandırır. Boşluk tuşuna basmak, altını kulenin bir sonraki seviyesine harcar: her seviye daha uzağa erişir, daha hızlı ateş eder veya daha güçlü vurur. Üsse ulaşan bir creep içeri girer. Seviyeler, tasarımcının koda dokunmadan bir varlıkta ayarladığı oyun verileridir; kule çok sayıda mermi ateşlediğinden, her atış için yeni bir tane oluşturup yok etmek yerine bunları bir havuzdan yeniden kullanır.
İki betik yaz: varlık türü olan TowerData ve Tower. Creep, Bolt ve CreepSpawner hazır; kulenin Nearest ve Show özellikleri de hazır.
Görev
ZorKuleyi tamamla; Nearest(range) ve Show() hazır.
TowerLevel: serileştirilebilir, publicrange,fireEvery,damage,cost.TowerData,public List<TowerLevel> levelsiçerir.- Her
fireEverysaniyede bir,Nearest(range)bir yaratık bulursa kuleden birObjectPool<Bolt>kullanarak bir bolt oluştur:bolt.Launch(creep, damage, pool.Release). Creep.Killedsonrasında ganimet olarakbountyverildiğinde ve Space tuşuyla bir sonraki seviyecostbedeliyle satın alındığındaShow()çağrılır veTower level 2günlüğe kaydedilir.
“Oyna” düğmesine bas ve yükselt. Ardından “Kontrol et” düğmesine bas.
Kendin dene
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;
// Hazır: menzil içindeki kuleye en yakın creep veya 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;
}
// Hazır: seviyeyi ve altın miktarını Level 1, 0 gold biçiminde gösterir.
void Show()
{
infoText.text = "Level " + (level + 1) + ", " + gold + " gold";
}
}
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Kalıtım Değil, Bileşenler
Küçük BileşenlerTemel Düşman Script'iSoyut BileşenlerBirlikte Çalışan BileşenlerTekrar: Modüler TaretTekrar: Çift Namlulu Top4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larTekrar: Ganimet TablosuTekrar: Ganimeti At2Unity'de Arayüzler
IDamageableArayüzler ve TryGetComponentGetComponentsÖzet: Etkileşim TuşuÖzet: Erişim Mesafesindeki En Yakın5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriOrtak AyarlarRüzgârı KaydetVeri Olarak DalgalarTekrar: Eşya VeritabanıTekrar: Dükkândan Satın Al8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearestKendi başına pratik yap: Unity playground