CodeBlanks Logo Icon CodeBlanks

Durum makinesi

Basit bir FSM ile düşman durumlarını öğrenirsin.

Sonlu Durum Makinesi (FSM)

FSM (Finite State Machine), bir karakterin belirli durumlardan (örneğin Devriye / Patrol, Kovalama / Chase, Saldırı / Attack) yalnızca birinde bulunmasını sağlayan sade bir mimaridir.

public enum EnemyState {
    Patrol,
    Chase,
    Attack
}

Durumlar bir enum ile tanımlanır ve karakter aynı anda asla iki farklı durumda bulunamaz.

Durum Geçişleri ve switch Bloğu

Her karede aktif duruma karşılık gelen davranış bir switch-case bloğu içinde yürütülür. Koşullar sağlandığında durum değişkeni güncellenir.

switch (currentState) {
    case EnemyState.Patrol:
        PatrolAlongWaypoints();
        break;
    case EnemyState.Chase:
        agent.SetDestination(player.position);
        break;
}

Örneğin oyuncu belirli bir menzile yaklaştığında currentState = EnemyState.Chase; atanarak takip başlatılır.

Uygulama Durum makinesi geçişi

Bir Start metodu tanımla. İçinde string aktifDurum = "Chase"; tanımla ve konsola "Dusman durumu: " + aktifDurum yazdır.

Başlangıç kodu

Player.cs
using UnityEngine;

public class FsmTester : MonoBehaviour
{
    // Start icinde aktifDurum tanimla ve yazdir
}

Örnek çözüm

Player.cs
using UnityEngine;

public class FsmTester : MonoBehaviour
{
    void Start()
    {
        string aktifDurum = "Chase";
        Debug.Log("Dusman durumu: " + aktifDurum);
    }
}

Beklenen çıktı

Dusman durumu: Chase

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Düşmanın oyuncuyu gördüğünde Devriye (Patrol) durumundan Kovalama (Chase) durumuna geçmesini sağlayan mimari yapıya ne ad verilir?

  • Sonlu Durum Makinesi (Finite State Machine / FSM) Doğru cevap
  • Audio Listener
  • Shader Pipeline
  • JSON Deserializer

Açıklama: Sonlu Durum Makinesi (FSM), koşullara göre (oyuncuyu görme gibi) durumlar arasında geçiş yapılmasını yönetir.

2 Düşman durumları enum tanımı

Soru
public enum EnemyState { ____, Chase, Attack }
Cevap
public enum EnemyState { Patrol, Chase, Attack }

Açıklama: Düşmanın nöbet tuttuğu devriye durumunu tanımlamak için 'Patrol' kullanılır.

3 FSM durum kavramları

Kavram Anlamı
Patrol Belirlenen rotada nöbet devriyesi
Chase Oyuncuyu hedef alarak takip etme
Attack Oyuncu menzildeyken hasar verme
FSM Duruma göre davranışı yöneten makine

İleri seviye bölümündeki tüm dersler