Unity’de Animasyon Performansı: DOTween mi, PrimeTween mi?

Unity’de animasyon denince çoğumuzun aklına ilk olarak DOTween gelir. Yıllardır kullanılan, güçlü ve esnek bir araç.
Ancak özellikle mobil projelerde veya aynı anda çok sayıda obje animasyonu olan senaryolarda, animasyonların performans maliyeti daha görünür hâle geliyor.

Bu yazıda:

  • Animasyonların performansı neden etkilediğini,

  • Garbage Collection (GC) ile animasyonlar arasındaki ilişkiyi,

  • PrimeTween’in neden “zero-allocation” odaklı bir çözüm sunduğunu,

  • DOTween ile temel farklarını,

temel seviyede ama teknik bir bakışla ele alacağız.

Amaç:

“Hangisi daha iyi?” tartışması değil,
“Hangi araç hangi problem için daha doğru?” sorusuna net cevaplar verebilmek.

Animasyon Performansı Neden Sorun Olur?

Unity’de performans problemleri çoğu zaman tek bir büyük hatadan değil, çok sayıda küçük maliyetin üst üste binmesinden kaynaklanır.

Animasyon tarafında bu maliyetler genellikle şunlardan gelir:

  • Runtime sırasında heap allocation

  • Bu allocation’ların birikmesi

  • Garbage Collection’ın devreye girmesi

  • GC sırasında frame’in kısa süreli durması

Bu duraksamalar özellikle:

  • Mobil cihazlarda

  • Match-3, grid, conveyor, hyper-casual gibi çok sayıda objenin hareket ettiği oyunlarda
    net şekilde hissedilir.

FPS düşüşü yerine çoğu zaman oyuncu şunu hisseder:

“Oyun takılıyor gibi ama nedenini anlayamıyorum.”

Garbage Collection (GC) Kısa ve Net

GC’yi basitçe şöyle düşünebiliriz:

  • Oyun çalışırken heap üzerinde geçici objeler oluşur

  • Bu objeler birikir

  • GC devreye girer ve temizler

  • Temizlik sırasında ana thread kısa süreliğine durur

Bu durma:

  • 16 ms yerine 25–30 ms frame süreleri

  • Mikro takılmalar

  • Özellikle animasyon sırasında hissedilen jitter

olarak geri döner.

İşte PrimeTween’in ana iddiası tam burada başlıyor.

PrimeTween Nedir?

PrimeTween, Unity için geliştirilmiş,
runtime sırasında heap allocation yapmayan (zero-allocation) bir tween kütüphanesidir.

Temel hedefi:

  • GC üretmeden

  • Stabil FPS ile

  • Özellikle gameplay animasyonlarını güvenli şekilde çalıştırmak

Temel Fark: DOTween vs PrimeTween

  • En önemli fark, kütüphanelerin tween’leri nasıl temsil ettiğidir.

Yapısal Karşılaştırma

Özellik DOTween PrimeTween
Tween tipi class struct
Bellek Heap Stack / native
GC riski Var Yok
Runtime allocation Yapabilir Yapmaz
Mobil odak Orta Yüksek

Bu fark küçük gibi görünür ama çok sayıda animasyon söz konusu olduğunda belirleyici olur.

Basit Hareket Örneği

DOTween

transform.DOMoveX(10f, 1f);

Bu kod:

  • Bir tween objesi oluşturur

  • Heap allocation yapabilir

  • GC riski taşır

Tek bir kullanımda sorun değildir.
Ama bu kodu yüzlerce obje için, sürekli çağırdığınızda maliyet birikir.

PrimeTween

Tween.PositionX(transform, 10f, 1f);

Bu kod:

  • Allocation yapmaz

  • GC üretmez

  • Fire-and-forget çalışır

Aynı işi yapar,
ama runtime maliyeti farklıdır.

Completion Callback Farkı

Performansın genellikle gözden kaçan bir diğer noktası: closure allocation.

DOTween

transform.DOMoveX(10f, 1f)
    .OnComplete(() => OnMoveCompleted());

Bu kullanım:

  • Lambda oluşturur

  • Closure allocation riski taşır

  • GC baskısını artırabilir

PrimeTween

Tween.PositionX(transform, 10f, 1f)
    .OnComplete(this, t => t.OnMoveCompleted());

Bu yaklaşım:

  • Allocation yapmaz

  • Closure üretmez

  • GC tetiklemez

Aynı davranış, farklı maliyet.

“Tek Kullanımlık Tween” Felsefesi

PrimeTween’de tween’ler:

  • Oluşturulur

  • Çalışır

  • Biter

  • Ve yeniden kullanılmaz

Bu bilinçli bir tasarım kararıdır.

Avantajları:

  • Tween cache’leme ihtiyacı yok

  • SetAutoKill(false) gibi ayarlara gerek yok

  • OnDestroy içinde manuel Kill() zorunluluğu yok

  • Null reference ve lifecycle hataları azalır

Bu model özellikle:

  • Gameplay kodlarında

  • State karmaşası olan sistemlerde
    daha güvenli bir yapı sunar.

Inspector ve Editör Tarafı

PrimeTween sadece kod tarafına odaklanmaz.
TweenSettings<T> gibi yapılar sayesinde:

  • Duration

  • Ease

  • Delay

  • Loop

  • Direction

gibi değerler Inspector üzerinden ayarlanabilir.

Bu da:

  • Magic number kullanımını azaltır

  • Tasarımcıların animasyon tweak’lerini doğrudan yapabilmesini sağlar

  • Kod–tasarım bağımlılığını düşürür

Ancak bu özellik, performans kazanımının yanında gelen bir bonus olarak görülmelidir.

Ne Zaman PrimeTween?

PrimeTween özellikle şu senaryolarda öne çıkar:

  • Mobil oyunlar

  • Match-3, grid, conveyor sistemleri

  • Aynı anda çok sayıda gameplay objesi

  • FPS stabilitesinin kritik olduğu projeler

Ne Zaman DOTween Hâlâ Mantıklı?

DOTween hâlâ çok güçlüdür ve şu alanlarda avantajlıdır:

  • Karmaşık UI animasyonları

  • Menü geçişleri

  • Timeline hissi veren sekanslar

  • Editör araçları ve prototipleme

Bu yüzden konu:

“DOTween mi, PrimeTween mi?”
değil,

“Hangi animasyon nerede çalışıyor?”

sorusudur.

Sonuç

PrimeTween:

  • Zero-allocation yaklaşımı

  • GC üretmeyen yapısı

  • Basit ama bilinçli API tasarımı

ile performans odaklı animasyonlar için güçlü bir alternatiftir.

DOTween ise:

  • Esnekliği

  • Olgun ekosistemi

  • UI ve sekans tarafındaki gücü

ile hâlâ çok değerli bir araçtır.

İyi bir Unity geliştiriciyi ayıran şey:

  • Tek bir araca bağlı kalmak değil, Doğru aracı doğru problemde kullanabilmektir.

Bir Yanıt Bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir