Basit Kule Savunması
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 48 / 50.
Sürüngenler yol boyunca üssünüze doğru ilerliyor ve üssü tek bir kule koruyor. Kule, menzilde bir sürüngen varken ona en yakın sürüngene cıvatalar fırlatıyor ve indirdiği her sürüngen altın kazandırıyor. Space, altını kulenin bir sonraki seviyesi için harcıyor: her seviye daha uzağa erişiyor, daha hızlı ateş ediyor veya daha sert vuruyor. Üsse ulaşan bir sürüngen içeri girer. Seviyeler, kodu değiştirmeden tasarımcının bir varlıkta ayarladığı oyun verileridir ve kule çok sayıda cıvata ateşlediğinden, her atış için 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.
Görev
ZorInspector, Tower'a data (Arrow varlığı), boltPrefab ve infoText sağlar. Input System'in Keyboard.current özelliği üzerinden Space tuşunu oku.
TowerData.csiçinde: Inspector'ın gösterebileceği birTowerLevelsınıfı;public float range,public float fireEvery,public int damagevepublic int cost(o seviyeye ulaşmanın bedeli) alanlarıyla birlikte; ayrıca Create menü girdisi olan bir ScriptableObject olanTowerDatavepublic List<TowerLevel> levels. Arrow varlığı üç seviye içerir: menzil 4, atış aralığı 1 s, hasar 1, maliyet 0; menzil 5, atış aralığı 0.6 s, hasar 1, maliyet 6; menzil 6, atış aralığı 0.4 s, hasar 2, maliyet 12.- Kule ilk seviyede ve 0 altınla başlar; bunlardan biri değiştiğinde
infoTexther ikisini deLevel 1, 0 goldbiçiminde gösterir. - Son atıştan bu yana seviyenin
fireEverysaniyesi geçtiğinde ve menzil içinde bir creep olduğunda (creep'in collider'ı,Physics.OverlapSphere'in bulduğu şekilde kuledenrangeuzaklık içinde), kule kendisine en yakın creep'e ateş eder. BirObjectPool<Bolt>'tan bir bolt alır, onu kulenin konumuna yerleştirir vebolt.Launch(creep, damage, pool.Release)çağrısını yapar: bolt işi bittiğinde son argümanı çağırır ve böylece havuza geri verilir. Bolt, havuzda beklerken devre dışı bırakılır, havuzdan alındığında etkinleştirilir. - Ölen her creep,
bountydeğerini altın olarak verir: statikCreep.Killedolayını dinle. - Bir sonraki seviye varsa ve altın
costdeğerini karşılıyorsa Space bu seviyeyi satın alır: maliyet altından düşülür, kule bir seviye yükselir veTower level 2olarak log kaydı oluşturur. Aksi hâlde Space hiçbir şey yapmaz.
Play'e bas, yolu basılı tutup kuleyi yükselt, ardından Check'e 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;
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Hiyerarşiler Değil, Bileşenler
Küçük BileşenlerTemel Bir Düşman BetiğiSoyut BileşenlerBirlikte Çalışan BileşenlerÖzet: Modüler Taret4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larÖzet: Ganimet Tablosu7Durum Makineleri
Sınıflar Olarak DurumlarBir Durum MakinesiGeçişlerDüşmanların Yapay ZekâsıTekrar: Kapı Durumları10Proje: Arena Hayatta Kalma
KahramanDüşman Türleri5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriPaylaşılan AyarlarVeri Olarak DalgalarTekrar: Eşya Veritabanı8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearest