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.
İlgili Unity & C# soruları
- Unity'de Update, FixedUpdate ve LateUpdate arasındaki fark nedir?
- GetComponent çağrılarını neden önbelleğe almalısınız?
- Rigidbody, physics layer'lar ve raycast nasıl çalışır? FixedUpdate neden önemlidir?
- C# delegate, event ve UnityEvent arasındaki farklar nelerdir?
- Unity'de garbage collection neden frame düşüşüne yol açar? Update içinde allocation'dan nasıl kaçınırsınız?
- C#'ta struct ile class arasındaki fark nedir? Value type ve reference type oyunda neden önemlidir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.