Unity ScriptableObject Nedir?

Unity ScriptableObject Nedir?

Unity Scriptable Object Nedir?

Scriptable Object Unity tarafından oluşturulmuş bir veri depolama komut dosyasıdır diyebilirim. İçerisinde sakladığınız veriyi isterseniz Editör üzerinden isterseniz oyun içerisinden düzenleyebilir, kaydedebilir ve silebilirsiniz.
Projenizde sakladığınız büyük verileri ScriptableObject olarak kaydedebilir ve daha sonrasında oldukça kolay bir şekilde buradaki verilere erişebilir, düzenleyebilirsiniz.

A Scriptable Object is a data container that you can use to save large amounts of data, independent of class instances. - Unity Documentation

Türkçeye çevirmemiz gerekir ise 

Scriptable Obje, Sınıflardan bağımsız olarak büyük verileri saklayabileceğiniz veri kapsayıcılarıdır. (veri depolarıdır.) - Unity Documentation

Scriptable Objeler ile ilgili temel bilgileri verdiğimize göre gelin bir de bunun kullanımına bakalım. 

Scriptable Object Kullanımı

İlk olarak bir script oluşturmamız ve bu scripti ScriptableObject sınıfından miras aldırmamız gerekmektedir. Gelin bunları kodlar ile örneklendirelim.

using UnityEngine;

// menuName = Scriptable Objenizin menüde görülen adıdır. Eğer kategorize etmek isterseniz "kategori/scriptable obje adı" yöntemini kullanabilirsiz.
// fileName = Oluşturulacak Scriptable Objenin oluşturulduğu zaman alacağı isim.
// order = Menüde hangi sırada gözükeceği.
[CreateAssetMenu(menuName = "UrhobA/Scriptable Object Menu Name", fileName = "Created Scriptable Object Name", order = 0)]
public class UrhobASO : ScriptableObject
{
    // Değişken tanımlamaları
    // Burada public olarak tanımlıyoruz ki başka scriptler tarafından da kullanılabilsin.
    public string stringDeger;
    public int intDeger;
    public float floatDeger;


    private void Awake()
    {
        Debug.Log("Monobehaviour da bulunduğu gibi awake fonksiyonu scriptable objelerde de bulunmaktadır.");
        Debug.Log("Awake sadece editörde çalışır");
    }

    private void OnEnable()
    {
        Debug.Log("OnEnable fonksiyonu scriptable objelerde de bulunmaktadır.");
        Debug.Log("OnEnable hem editörde hem de run time da çalışmaktadır.");
    }

    private void OnDisable()
    {
        Debug.Log("OnDisable fonksiyonu scriptable objelerde de bulunmaktadır.");

    }
}

Scriptable Objemizin kodlarınız yazdıktan sonra artık klasörler "folder" kısmında sağ tıklayıp oluşturduğumuz objemizden veriler için asıl objelerimizi oluşturabiliriz.

Scriptable Object Oluşturma

Oluşturduğunuz Scriptable Objeyi Inspector panelinden değerler girebilir ve düzenleyebilirsiniz.

Scriptable Objects Inspector

Daha sonra oluşturduğunuz bu objeyi kullanmak istediğiniz bir başka objeye sürükle bırak yaparak kullanabilirsiniz. Normal bir sınıfa erişiyormuş gibi bu objenize bir başka script üzerinden erişebilirsiniz.