Menu
CoddyTech

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.

challenge icon

Görev

Kolay

Canavarlar 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 ve The golem wakes up mesajını kaydeder; ancak Unity, Golem'in Start metodunu çalıştırıp Enemy'nin metodunu hiç çalıştırmadığı için hp değeri 0 olarak kalır.
  • Wasp: Update metodu onu spawnPoint.x değ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;
    }
}
quiz iconKendini test et

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