Unity3D Scriptler Arası Değişken Kontrolü
  1. Anasayfa
  2. Üretici Teknolojileri

Unity3D Scriptler Arası Değişken Kontrolü

17

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

Bu İçeriğe Tepkin Ne Oldu?
  • 40
    harika_
    Harika!!
  • 4
    be_enmedim
    Beğenmedim
  • 1
    _ok_iyi
    Çok iyi
  • 2
    sevdim_
    Sevdim!
  • 1
    bilemedim_
    Bilemedim!
  • 2
    olmad_
    Olmadı!
  • 3
    k_zd_m_
    Kızdım!

Bilişim Sistemleri Mühendisliği öğrencisiyim. 2012 yılından bu yana WEB alanında çalışıyorum. 2018 yılında Oyun geliştiriciliği alanında çalışmalara başladım, 2020 yılında ilk oyunumu yayınladım. Şuan oyun geliştiriciliği alanında çalışmalar yaparak VR & AR teknolojileri üzerinde kendimi geliştirmeye çalışıyorum.

Yazarın Profili
İlginizi Çekebilir

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorumlar (17)

Popüler Yorumlar
  1. 11/03/2021

    Çok açık ve bilgilendirici bir yazı olmuş, elinize sağlık.

  2. 10/03/2021

    Faydalı bir yazı olmuş.
    Teşekkürler…

Yapılan Yorumlar
  1. 10/03/2021

    Çok güzel ve etkili bir yazı, ellerine sağlık

  2. 10/03/2021

    Faydalı bir yazı olmuş.
    Teşekkürler…

  3. Açıklayıcı anlatım için teşekkür ediyorum.

  4. Oyun yapımına yeni başlayanlar bu yazıyı okuyunca, kolaylıkla Unity oyun motorunun scripting mantığını anlayacaktır. Görsellerle desteklenmesi anlaşılır olmasını sağlamış.

    • 11/03/2021

      Yorumunuz için teşekkür ederim, bu makalede scripting mantığının anlaşılabiliyor olmasına sevindim.

  5. 11/03/2021

    Unity’de yeni oyun geliştirmeye başladım. Gerçekten çalışmalarım için yol gösterici ve bilgilendirici bir yazı olmuş. Ellerine sağlık çok keyifle okuduğum bir yazıydı.

  6. 11/03/2021

    Çok açık ve bilgilendirici bir yazı olmuş, elinize sağlık.

  7. 12/03/2021

    Güzel bir yazı olmuş. Elinize sağlık.

  8. 12/03/2021

    Sektörde bilinmesi gereken kritik bir konuya değinmişsiniz. Gayet açıklayıcı bir yazı olmuş, teşekkürler.

  9. Öncelikle Merhabalar.
    Ben oyun geliştirme aşamasında olan 19 yaşında bir birey olarak geliştirdiğim oyundaki bir eksiği gidermek için interneti didik didik ettim ancak nafile hiçbir video bulamadım ta ki sitelere göz atmaya başlayıncaya kadar.
    sizin sitenizdeki resim-4 sayesinde şu anda hedefime ulaşmış durumdayım. bundan dolayı ne muradınız varsa eresiniz size çokkk tekeşekkür ediyorum ve de varsa bi irtibat hattınız bu bilgileri veren kişi ile takipleşmek istiyorum ki biraz daha kompleks işlere girdiğimde daha fazla ulaşamayacağı soru birikebilir. tekrardan teşekkürler.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir