Bir karakter veya düşman AI'ı için finite state machine (FSM) nasıl tasarlanır?

Cevap

FSM, bir varlığın aynı anda yalnızca bir durumda (state) bulunduğu ve belirli koşullarla durumlar arasında geçiş yaptığı modeldir. Ör. düşman: Patrol → Chase → Attack → Flee.

Basit switch ile başlanabilir, ancak durum sayısı arttıkça State pattern daha sürdürülebilirdir:

public interface IState
{
    void Enter();
    void Tick();
    void Exit();
}

public class StateMachine
{
    IState current;
    public void ChangeState(IState next)
    {
        current?.Exit();
        current = next;
        current.Enter();
    }
    public void Tick() => current?.Tick();
}

public class ChaseState : IState
{
    readonly Enemy enemy;
    public ChaseState(Enemy e) => enemy = e;
    public void Enter() => enemy.Agent.speed = 6f;
    public void Tick()
    {
        enemy.Agent.SetDestination(enemy.Target.position);
        if (enemy.DistanceToTarget < 2f) enemy.Fsm.ChangeState(enemy.AttackState);
        else if (enemy.DistanceToTarget > 20f) enemy.Fsm.ChangeState(enemy.PatrolState);
    }
    public void Exit() { }
}

Avantajları

  • Her durumun mantığı ayrı sınıftadır, Enter/Exit ile animasyon ve ses tetikleme kolaylaşır.
  • Hata ayıklama kolaydır: "şu an hangi durumdayım" tek alan.

Sınırları ve alternatifler

  • Durum sayısı arttıkça geçişler patlar (her durum diğerlerini bilir). Hierarchical FSM ortak davranışları üst duruma taşır.
  • Karmaşık AI için Behavior Tree (modüler, yeniden kullanılabilir) veya GOAP / Utility AI (hedef ve puan tabanlı karar) tercih edilir.
  • Unity'nin Animator'ü de bir FSM'dir; ama oyun mantığını animator'e gömmek yerine mantık FSM'i kodda tutmak genellikle daha temizdir.
  1. Oyun döngüsü (game loop) nedir? Sabit ve değişken zaman adımı arasındaki fark nedir?OrtaOyun ProgramlamaGame Dev
  2. Delta time nedir, neden kullanılır?KolayOyun ProgramlamaGame Dev
  3. Object pooling nedir, neden kullanılır?OrtaOyun ProgramlamaGame Dev
  4. Entity Component System (ECS) nedir? Klasik nesne yönelimli yapıdan farkı nedir?ZorOyun ProgramlamaGame Dev
  5. Çarpışma tespitinde broad phase ve narrow phase nedir?ZorOyun ProgramlamaGame Dev
  6. Multiplayer oyunlarda server authority, client-side prediction ve lag compensation nasıl çalışır?ZorOyun ProgramlamaGame Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle