Temel Bir Düşman Betiği
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 2 / 50.
Düşmanların kodlarının çoğu ortaktır: can puanları, hızları ve hareket etme biçimleri. Bu kod, MonoBehaviour sınıfından türeyen bir temel sınıfta yer alabilir ve her düşman türü bu sınıftan türeyebilir. Bu Enemy, Start içinde can puanlarını ayarlar ve Update içinde baktığı yöne doğru yürür; Ghost ise başlangıç davranışını değiştirerek iki kat hızlı hareket eder:
public class Enemy : MonoBehaviour
{
public int maxHp = 3;
public float speed = 2f;
protected int hp;
protected virtual void Start()
{
hp = maxHp;
}
protected virtual void Update()
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}public class Ghost : Enemy
{
protected override void Start()
{
base.Start();
speed *= 2f;
}
}Ghost alanları devralır; bu nedenle Inspector, Ghost üzerinde maxHp ve speed değerlerini gösterir. Update'i de devralır, bu yüzden kendine ait bir Update olmadan yürür. hp, protected olarak tanımlanmıştır: Enemy ve onun alt sınıfları bunu kullanabilir, diğer betikler kullanamaz.
Unity, erişim belirleyicileri ne olursa olsun Start ve Update'i adlarına göre bulur ve en türemiş sınıftaki yöntemi çağırır. Enemy'nin Start yöntemi özel bir void Start() olsaydı ve Ghost kendi yöntemini tanımlasaydı Unity yalnızca Ghost'takini çağırırdı: Enemy'ninki hiç çalışmaz ve hata olmadan hp 0 olarak kalırdı. Temel sınıfın mesajlarını protected virtual olarak tanımlamak, bunu sıradan C# davranışı hâline getirir: alt sınıf override yazar ve base.Start(), çağırdığın noktada temel sınıfın kısmını çalıştırır. Çağrıyı eklemezsen temel sınıfın kısmı atlanır; böylece alt sınıf bir adım eklemek yerine onun yerini alır.
Görev
KolayCanavarlar kaleye doğru ilerliyor. Enemy.cs, ortak özelliklerini içerir: Start, hp değerini maxHp olarak ayarlar ve spawnPoint değerini kaydeder; Update ise canavarı speed hızında z ekseni boyunca ilerletir. Grunt, sıradan bir Enemy'dir ve çalışır. İki tür kendi adımlarını ekler, ancak her biri Enemy'nin yaptığı kısmı atlar:
Golem: Start metodu golemi 1.5 kat büyütür veThe golem wakes upmesajını kaydeder; ancak Unity, Golem'in Start metodunu çalıştırıp Enemy'nin metodunu hiç çalıştırmadığı içinhpdeğeri 0 olarak kalır.Wasp: Update metodu onuspawnPoint.xdeğerinin her iki tarafında 1 birim sallar; ancak Unity, Wasp'ın Update metodunu çalıştırıp Enemy'nin metodunu hiç çalıştırmadığı için olduğu yerde zikzak çizer.
Enemy'nin Start ve Update metotlarını protected virtual yap ve Golem ile Wasp'ta bunları geçersiz kılarak her birinin önce Enemy'nin yaptığı kısmı, sonra kendi kısmını çalıştırmasını sağla. Play'e, ardından Check'e bas.
Kendin dene
using UnityEngine;
// Tüm canavarların ortak özellikleri.
public class Enemy : MonoBehaviour
{
public int maxHp = 4;
public float speed = 1.5f;
protected int hp;
protected Vector3 spawnPoint;
void Start()
{
hp = maxHp;
spawnPoint = transform.position;
}
void Update()
{
// z ekseni boyunca kaleye doğru ilerle
transform.position += Vector3.back * speed * Time.deltaTime;
}
}
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