Unity Animator state machine nasıl çalışır? Transition, parametre, blend tree ve root motion nedir?

Cevap

Animator Controller, animasyon klipleri arasında geçişleri yöneten bir state machine'dir. Her state bir klip veya blend tree oynatır; state'ler arasında transition'lar, parametrelere bağlı koşullarla tetiklenir.

  • Parametre tipleri: Float, Int, Bool, Trigger.
  • Transition ayarları: Koşullar, Has Exit Time (klip bitmeden geçilsin mi), Transition Duration (crossfade süresi), Interruption Source.
  • Blend Tree: Bir parametreye göre birden fazla klibi karıştırır; ör. hız 0 → idle, 2 → walk, 6 → run. 2D blend tree ile strafe hareketleri.
  • Layer'lar ve Avatar Mask: Üst gövde ateş ederken alt gövdenin koşmaya devam etmesi.
  • Sub-state machine: Karmaşık graf'ı gruplamak.
  • Root motion: Hareket, koddan değil animasyon klibindeki kök kemik hareketinden gelir; ayak kayması (foot sliding) azalır ama kontrol hissi değişir.
public class PlayerAnim : MonoBehaviour
{
    static readonly int SpeedHash = Animator.StringToHash("Speed");
    static readonly int JumpHash  = Animator.StringToHash("Jump");
    [SerializeField] Animator animator;

    public void Tick(float speed, bool jumpPressed)
    {
        animator.SetFloat(SpeedHash, speed, 0.1f, Time.deltaTime); // damping ile
        if (jumpPressed) animator.SetTrigger(JumpHash);
    }
}

İyi pratikler:

  • Parametre isimlerini StringToHash ile önbelleğe alın.
  • Gameplay mantığını (ör. "hasar verilebilir mi") animator state'ine bağlamayın; oyun durumu koddaki FSM'de, animator sadece görsel tarafta olsun. Animation Event'ler hitbox açma gibi zamanlamalar için kullanılabilir.
  • Çok sayıda karakterde Animator maliyeti yüksektir; uzaktaki karakterler için Culling Mode ve LOD kullanılır.
  • "Any State"ten çıkan transition'lar hızlı ama dağınık hale gelebilir; dikkatli kullanın.
  1. Unity'de Update, FixedUpdate ve LateUpdate arasındaki fark nedir?KolayUnity & C#Game Dev
  2. GetComponent çağrılarını neden önbelleğe almalısınız?KolayUnity & C#Game Dev
  3. Rigidbody, physics layer'lar ve raycast nasıl çalışır? FixedUpdate neden önemlidir?OrtaUnity & C#Game Dev
  4. C# delegate, event ve UnityEvent arasındaki farklar nelerdir?OrtaUnity & C#Game Dev
  5. Unity'de garbage collection neden frame düşüşüne yol açar? Update içinde allocation'dan nasıl kaçınırsınız?ZorUnity & C#Game Dev
  6. C#'ta struct ile class arasındaki fark nedir? Value type ve reference type oyunda neden önemlidir?OrtaUnity & C#Game 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