ScriptableObject nedir ve hangi problemleri çözer?

Cevap

ScriptableObject, bir GameObject'e bağlı olmadan proje içinde asset olarak saklanan veri kapsayıcısıdır. MonoBehaviour gibi sahnede yaşamaz, Update almaz.

[CreateAssetMenu(menuName = "Game/Weapon")]
public class WeaponData : ScriptableObject
{
    public string weaponName;
    public int damage;
    public float fireRate;
    public GameObject projectilePrefab;
}

public class Gun : MonoBehaviour
{
    [SerializeField] WeaponData data;
    void Fire() { /* data.damage kullan */ }
}

Çözdüğü problemler

  • Veri tekrarı: 100 düşman aynı istatistiği kullanıyorsa, her prefab'da kopya tutmak yerine tek bir asset'e referans verilir. Bellek tasarrufu sağlar.
  • Tasarımcı dostu: Oyun tasarımcıları kod değiştirmeden Inspector'dan denge ayarı yapar.
  • Sahneler arası veri: Sahne değişse de asset bellekte kalır.
  • Bağımlılık azaltma: Event kanalları (ScriptableObject tabanlı event'ler) ile sistemler birbirini doğrudan tanımadan haberleşir.

Dikkat edilmesi gerekenler

  • Editörde Play modunda ScriptableObject'te yapılan değişiklikler kalıcıdır, oyundan çıkınca geri dönmez.
  • Build'de ise değişiklikler diske yazılmaz; bu yüzden kayıt sistemi için uygun değildir. Çalışma zamanı durumunu ayrı tutmak gerekir.
  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