Unity3D Scriptler Arası Değişken Kontrolü

Unity Scriptler Arası Değişken Kontrolü

Dünya üzerinden sık kullanılan gelişmiş oyun motorlarından birisi olan Unity 3D adlı programda yapılan oyun içindeki birçok özellik Scriptler aracılığıyla oyuna kazandırılmaktadır. Oyuna eklenen bir Script karakterin hareketinden oyunda sahnelerin değişimine kadar her türlü özelliği oyuna katabilmektedir.

Unity ile gelişmiş oyun projeleri oluşturulurken Scriptler arasında veri aktarımına ihtiyaç duyulabilmektedir. Bir Script’ten başka bir Script’e veri aktarmanın 3 farklı yolu bulunmaktadır. Bu 3 yol sırasıyla şunlardır:

  • Verinin çekileceği Script’i Public bir değişkende tutmak
  • Verinin çekileceği Script’e kodlar vasıtasıyla ulaşmak
  • Değişkeni Static yapmak

Bu 3 maddeyi doğru bir şekilde açıklayabilmek için iki adet örnek Script oluşturalım. Bu Scriptlerden ilkinin ismi Script1 diğerinin ismi ise Script2 olsun.

Resim-1

Biz Script2’de bulunan bir değişkeni Script1’e çekmeye çalışalım. Değişkenimiz de Public bir değişken olsun ve ismi “sayi” olsun.

Scriptlerimizi oluşturup “sayi” değişkenimizi de ürettiğimizde artık yukarıda bahsedilen 3 farklı yolu uygulamaya başlayabiliriz.

Verinin Çekileceği Script’i Public Bir Değişkende Tutmak

Script’i Public bir değişken olarak ayarlayıp o değişken üzerinden veri çekmek en sık tercih edilen ve en kolay yöntem olarak bilinen bir yöntemdir. Bu yöntemi uygulamak için öncelikle Script1’e Public bir “cekilecekVeri” objesi tanımlayalım. Ardından kodumuzu kaydedelim.

Resim-2

Kodumuzu kaydettikten sonra Script1’i ve Script2’yi atabileceğimiz birer obje üretelim. Script1 için obje1, Script2 için ise obje2 adında 2 adet obje üretelim. Ardından Scriptleri objelere atalım. Obje1’e tıklayalım ve Inspector paneline göz atalım.

Resim-3

Görüldüğü üzere “Cekilecek Veri” adından bir Public GameObject değişkenimiz oluşturulmuş. Bu kısma Script2’yi içerisinde barındıran obje2 objesini atalım. Ardından Script1’den Script2’ye GetComponent metodu ile ulaşmaya çalışalım ve kodun hata vermemesi için sayımızı 1 artıralım.

Resim-4

Görüldüğü üzere çekmemiz gereken veri olan “sayi” verisine sorunsuz bir şekilde ulaşıp Start fonksiyonunda onu 1 artırdık. Bu şekilde Scriptler arasında veri çekme işlemini kolaylıkla yapabilirsiniz. Şimdi diğer bir yöntem olan çekilecek Script’e kodlar vasıtası ile ulaşmayı deneyelim.

Verinin Çekileceği Script’e Kodlar Vasıtasıyla Ulaşmak

Bu yöntemi uygulamak için gene obje1 ve obje2 objelerini oluşturalım. Bu objelere de daha önceden hazırladığımız Script1 ve Script2 Scriptlerini Component olarak ekleyelim. Ardından ulaşmak istediğimiz Script’e hangi kodlar ile ulaşabileceğimizi inceleyelim.

  • GameObject obje = GameObject.Find(“Objenin ismi”):
  • GameObject obje = GameObject.FindWithTag(“Objenin etiketi”):
  • Player playerScripti = obje.GetComponent<Player>():
  • Player playerScripti = FindObjectOfType<Player>():

Yukarıdaki maddelerde verilen 4 adet kod çeşidi ile ulaşmanız gereken Script’e ulaşabilirsiniz. Şimdi bu yöntemleri tek tek açıklayalım ve bir tanesi ile bir örnek yaparak ulaşmak istediğimiz veriye ulaşalım.

Obje İsmi ile Script’e Ulaşmak

Bu yöntem en çok tercih edilen yöntemlerdendir. Sahnedeki her objenizin isminin farklı olduğunu düşünürsek bu sayede istediğiniz objenin adını yazarak o objeye kodlarda ulaşabilirsiniz. Bunun için yukarıdaki maddelerde 1. Örnekte verilen kodu yazmanız yeterlidir. GameObject.Find metodu sahnedeki objeleri ismine göre aramaktadır.

Objenin Etiketi ile Script’e Ulaşmak

Çok tercih edilen bir yöntem olmamakla beraber zaman zaman bu yöntem de kullanılmaktadır. Her objeye ayrı ayrı etiket verilmediğinden dolayı bu kod her zaman doğru bir şekilde çalışmaz. Genelde daha önce bir etiket verilmiş objeler için kullanılır. Metodun adından da anlaşılacağı üzere GameObject.FindWithTag metodu objeleri etiketlerine göre arayıp bulmaktadır.

GetComponent ile Script’e Ulaşmak

GetComponent metodu ulaşılan obje üzerinden Component çekmek için kullanılan bir metod olarak bilinir. Bu metod yazılan Script’ten yola çıkarak objede o Component’in bulunup bulunmadığını araştırır. Eğer objede o Component bulunmuyorsa Null değer döndürür.

FindObjectOfType Metodu İle Script’e Ulaşmak

Bu metod ile belirtilen Component’e ait objeleri arar. Eğer birden çok objede bu Component var ise ilk ulaştığını çağırır. Hiçbir objede bu Component bulunmuyorsa Null değer döndürür.

GameObjectFind ve GetComponent’i Birlikte Kullanalım

Şimdi ufak bir çalışma yaparak ulaşmak istediğimiz Script’e ulaşalım. Bunun için objeyi önce sahnede buldurup ardından Script’i GetComponent metodu ile o objeden çekeceğiz. Öncelikle objeyi bulmak için kodumuzu yazalım. Bu kodda ulaşmak istediğimiz objeyi bulup daha önceden oluşturduğumuz cekilecekVeri objesine atayacağız.

Resim-5

Obje2 adındaki objemizi GameObject.Find metodu ile bulduk ve cekilecekVeri objemize atadık. Şimdi GetComponent metodunu kullanarak obje2 objesinin Component’i olan Script2’ye ulaşarak “sayi” değişkenine ulaşalım ve o değişkeni 1 artıralım.

Resim-6

Görüldüğü üzere Update fonksiyonu içerisinde Script2’ye sorunsuz bir şekilde ulaştık ve içerisinde Public olarak belirttiğimiz “sayi” değişkenini artırma işlemini uyguladık. Bu yöntem ile kodlarla direkt olarak istediğiniz objenin istediğiniz Component’ine ulaşabilirsiniz.

Değişkeni Static Yapmak

Bir Script’ten diğer bir Script’teki değişkene ulaşma konusunda kullanacağımız son yöntem değişkeni Static olarak ayarlamaktır. Public Static olan bir değişkene bütün Script’ler üzerinden ulaşılabilmektedir. Bu yöntemi anlayabilmek için öncelikle “sayi” değişkenimizi Static olarak ayarlayalım.

Resim-7

Şimdi bu değişkene Script1 üzerinden erişmeye çalışalım.

Resim-8

Görüldüğü üzere ulaşmak istediğimiz değişkene hiçbir kod fazlalığı yapmadan sorunsuz bir şekilde ulaşabildik. Bu yöntemle de ulaşmak istediğiniz değişkenlere ulaşabilirsiniz.

Fakat bu yöntemin ufak da olsa bir dezavantajı bulunmaktadır. Eğer değişkeni Static olarak ayarlarsanız bu değişken Public bile olsa Inspector panelinde görülmeyecektir. Bu da değere Inspector üzerinden kolayca müdahale etmeyi engelleyen bir unsurdur. Eğer Inspector paneli üzerinden sık sık değiştireceğiniz bir değer değilse çok da büyük sorun teşkil etmeyecektir.

Bu makalede anlatılan 3 adet Script’ten veri çekme yönteminin üçü de Unity’de sorunsuz bir şekilde çalışmaktadır. Bu yöntemleri oyununuzun gidişatına göre değiştirebilir ve optimizasyon konusunda aralarındaki farklara göre farklı yöntemleri tercih edebilirsiniz. Bu yöntemler ileri düzey oyun geliştirme projelerinde çok sık kullanılan yöntemlerdir.

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar:

https://www.mshowto.org

TAGs: Oyun Geliştirme, Unity 3D, C#, Script, Unity Script, Unity Oyun Geliştirme, Unity, C# Script, Unity Game Developing

Yazı gezinmesi

Mobil sürümden çık