Input yönetiminde Command pattern nasıl kullanılır? Tuş atama ve undo nasıl sağlanır?

Cevap

Command pattern, bir eylemi nesneye dönüştürür. Input kodu "Space tuşuna basıldı, zıpla" demek yerine "Space'e bağlı komutu çalıştır" der. Böylece girdi ile oyun mantığı birbirinden ayrılır.

public interface ICommand
{
    void Execute(Unit unit);
    void Undo(Unit unit);
}

public class MoveCommand : ICommand
{
    readonly Vector2Int dir;
    public MoveCommand(Vector2Int d) => dir = d;
    public void Execute(Unit u) => u.Move(dir);
    public void Undo(Unit u)    => u.Move(-dir);
}

public class InputHandler
{
    readonly Dictionary<KeyCode, ICommand> bindings = new();
    readonly Stack<ICommand> history = new();

    public void Bind(KeyCode key, ICommand cmd) => bindings[key] = cmd;  // tuş atama

    public void Handle(Unit unit)
    {
        foreach (var (key, cmd) in bindings)
            if (Input.GetKeyDown(key)) { cmd.Execute(unit); history.Push(cmd); }

        if (Input.GetKeyDown(KeyCode.Z) && history.Count > 0)
            history.Pop().Undo(unit);
    }
}

Sağladıkları

  • Tuş atama (rebinding): Sadece sözlükteki eşleşme değişir.
  • Undo/redo: Strateji ve bulmaca oyunlarında komut geçmişi tutulur.
  • Replay ve test: Komut dizisi kaydedilip yeniden oynatılabilir.
  • AI ve oyuncu ortaklığı: AI da aynı komutları üreterek aynı Unit'i kontrol edebilir.
  • Ağ: Multiplayer'da sunucuya ham tuş değil komut gönderilir.

Unity'nin yeni Input System paketi de benzer bir soyutlama sunar: tuşlar Action'lara bağlanır ve kod sadece jump.performed gibi aksiyonlarla ilgilenir. Bu sayede klavye, gamepad ve dokunmatik girdi aynı kodla desteklenir.

  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