Unity 3D’de Scriptable Object Kullanımı

Muhammet Fatih Yilmaz
5 min readJun 21, 2022

--

Scriptable Object

Scriptable Object’ler büyük miktarda verileri çok küçük boyutlarla kaydedip, bu verileri kullanabileceğimiz veri depolarıdır diyebiliz. Scriptable Object’lerin esas kullanım amaçlarından birisi, verilerin tekrardan oluşturulmasından kaçınarak projemizdeki bellek kullanımını azaltmaktır. Oluşturduğumuz Scriptable Object sınıfını herhangi bir Game Object’e eklememiz gerekmez. Projemizde asset olarak üreterek bu verileri kullanabiliriz.

Daha fazla bilgi için https://docs.unity3d.com/Manual/class-ScriptableObject.html adresinden Unity’nin kendi dökümanına ulaşabilirsiniz.

Oluşturacağımız bu örneğimiz için sahnemizde iki butonumuz olacak. Bu iki butonumuza tıklayarak Scriptable Object ile verilerini tuttuğumuz iki karakterin bilgilerini log ekranına yazdıracağız.

Öncelikle “ScriptableScript” adında, örnek bir C# script dosyası oluşturalım.

Script dosyamızı açtığımızda, öncelikle sınıfımızın “ScriptableObject” sınıfından miras almasını sağlamalıyız. Bunun için “MonoBehaviour “ kısmını “ScriptableObject “ olarak değiştirelim.

Ardından oluşturacağımız veri depolarının Unity’de “Assets” içerisinde fare ile sağ tıklayarak “Create” menüsü içerisinde üretebilme işlemi için gerekli kodları yazalım.

“CreateAssetMenu” : Oluşturduğumuz Scriptable Object’i Unity’de “Assets” içerisinde fare ile sağ tıklayarak açtığımız “Create” menüsü içerisinde oluşturmamızı sağlar.

“fileName” : Oluşturulacak Scriptable Object’in adını belirlememizi sağlar.

“menuName” : “Assets” içerisinde fare ile sağ tıklayıp açtığımız “Create” menüsü içerisinde, oluşturacağımız Scriptable Object’in menüdeki adını belirler.

Şimdi de sırada karakterlerimizin bilgilerini log ekranına yazdırmamız için gereken değişkenlerimizi girelim.

Sonrasında karakterlerimizin bilgilerini, log ekranına yazdırmamızı sağlayacak kodları yazmamız için “CharacterInfo” isimli C# script dosyası oluşturalım ve sahnemizde de aynı isimde boş bir obje oluşturalım. Ardından oluşturduğumuz script dosyasını bu objeye ekleyelim.

Script dosyamızı açtıktan sonra ilk olarak, oluşturacağımız karakterlerimizin verilerini tuttuğumuz “ScriptableScript” sınıfımızdan karakterlerimiz için “firstCharacter” ve “secondCharacter” değerlerini oluşturalım ve böylelikle oluşturacağımız Scriptable Object’ler için referans sağlayalım.

Ardından butonlarımıza tıkladığımızda karakter bilgilerini log ekranımıza getirilecek kodlarımızı yazalım. Burada kullanacağımız bilgilerimizi az önce oluşturduğumuz değerler aracılığıyla yapıyoruz. Örnek olarak “firstCharacter.characterName” kısmıyla oluşturduğumuz “firstCharacter” Scriptable Object’inin içerisinde yer alacak olan characterName değişkeninden veriyi alarak sağlayacağız. Bu verileri birazdan oluşturacağımız Scriptable Object’lerin içerisine gireceğiz.

Artık bu Scriptable Object’lerimizi oluşturalım. Öncelikle Assets içerisindeki herhangi bir boş yere fare ile sağ tıklayalım. Ardından en üstteki “Create” seçeneğinin içine girelim. Sonra o menüden de bizim ismini verdiğimiz “Character” seçeneğinin içine girelim. Ardından da “New Character” seçeneğine tıklayalım. Sonra da ismini “First Character” olarak düzenleyelim. Böylelikle ilk karakterimiz için veri tutucusunu oluşturmuş olduk.

Aynı işlemleri ikinci karakter için yapalım ve ismini “Second Character” olarak düzenleyelim.

Şimdi de karakterlerimiz için oluşturduğumuz Scriptable Object’lerimizin içerisindeki verilerimizi dolduralım. İlk olarak “First Character” Scriptable Object’imize tıklayalım ve Inspector alanında bilgileri dolduralım.

Ardından ikinci Scriptable Object’imizi de aynı şekilde dolduralım.

Bilgilerimizi doldurduktan sonra, sırada oluşturduğumuz Scriptable Object’lerimizi, yine az önce oluşturduğumuz “Character Info” objesinin Inspector’ından “CharacterInfo” scriptimizdeki karşılık gelen alanlara eklemeye geldi. Bunun için “Character Info” objemize tıklayalım ve Inspector ekranındaki ilgili yerlere Scriptable Object’lerimizi sürükle bırak ile ekleyelim.

Şimdi, sahnemizde iki buton oluşturalım ve bunların adını “FirstCharacterButton” ve “SecondCharacterButton” olarak düzenleyelim.

Ardından sahnemizdeki ilk butonumuza tıklayalım ve Inspector panelinde alt taraftaki “On Click ()” eventini “+” tuşu ile arttıralım.

Ardından az önce sahnemizde oluşturduğumuz “Character Info” objemizi sürükleyip “Runtime Only” tarafının altındaki alana bırakalım. Sonrasında “No Function” kısmına tıklayalım.

Ardından “CharacterInfo” scriptimizin içerisindeki “GetFirstCharacterInfo” fonksiyonunu seçelim.

Böylelikle ilk butona tıkladığımızda, log ekranına ilk karakterimizin bilgilerini getirecek fonksiyon olan “GetFirstCharacterInfo” çalışacak.

Aynı işlemi ikinci karakter butonumuz için de yapalım ve bu sefer “GetSecondCharacterInfo” fonksiyonunu seçelim.

İhtiyacımız olan tüm işlemleri yaptık. Şimdi oyunumuzu çalıştıralım ve yaptıklarımızı test edelim.

“First Character” butonumuza tıklayalım. Log ekranına baktığımızda ilk karakterimize ait bilgilerin ekrana geldiğini göreceğiz.

Şimdi de ikinci karaktere yani “Second Character” butonuna tıklayalım. Log ekranına bu kez ikinci karakterimize ait bilgiler geliyor.

Böylelikle “Unity 3D’de Scriptable Object Kullanımı” yazımın sonuna geldim. Çok küçük bir boyutla çok fazla veriyi saklayabildiğimiz Scriptable Object’leri her projemizde ihtiyacımız olduğu şekilde uyarlayabiliriz. Ben de en temel anlamda Scriptable Object kullanımını anlatmaya çalıştım. Keyifli okumalar dilerim.

Herkese bol Unity’li günler. 😃

--

--