Godot Başlangıç Rehberi #4 | Scripting

Godot 4 tane scripting dilini deskteliyor. Bunlar Godot’un kendi scripting dili olan GDScript, görsel scripting dili olan VisualScript, C++ ve C#. Godot’un ana dilleri GDScript ve VisualScriptten oluşuyor. Bunlar Godot ile kullanılmak amacıyla oluşturulmuş olan diller olduğu için diğer dillere göre avantajları var. Bu dilleri Godot’un kendi text editor(metin düzenleyicisi)’ni kullanarak yazabiliyoruz fakat C++ ve C# için ayrı bir program kullanmanız lazım. Visual Studio gibi. 

GDScript

GDScript’in nasıl bir dil olduğundan ve avantajlarından bahsedelim. Bu bilgiler zaten kod yazmayı bilen ve GDScript’in nasıl bir dil olduğunu öğrenmek isteyenler için yararlı olacaktır.

Lua, Python ve Squirrel gibi dillerin kullanıcılarına tanıdık olacak biçimde tasarlanan GDScript son derece hızlı compile olan bir dil.

Matematik ve geometriye ağırlık veren kullanıcılar için kendi vektör tiplerine sahip.

Lua, Squirrel gibi dillerin aksine verimli bir şekilde çoklu thread kullanımını destekliyor.

Garbage collector kullanmıyor.

VisualScript

Godot 3.0 ile kullanıma giren VisualScript bir görsel programlama dili. VisualScript ile bloklar ve bağlantılar kullanılarak işlevsellik oluşturuluyor. Yazılımcı olmayan kullanıcılar için harika bir seçenek. Deneyimli yazılımcılar ise kodun bir kısmını grafiker, oyun dizayncısı gibi yazılım bilgisi olmayan insanların kolay erişebileceği hale getirmek için kullanabilir.

.NET / C#

Godot bir çok oyun geliştiricinin favori dili olan C#’ı da destekliyor. Olgun ve popüler bir dil olan C# sektörde başka alanlarda da sıklıkla kullanılmakta.

Performans ve kullanım kolaylığı arasında güzel bir dengeye sahip fakat garbage collecter’a sahip olduğu unutulmamalı.  

GDNative / C++

Yine Godot 3.0 sürümüyle sahneye gelen GDNative Godot’u yeniden derlemeden C++ ile scriplerimizi oluşturmamıza olanak veriyor.

Performans isteyen kullanıcılar için bire bir olan GDNative oyununuzun tamamını oluşturmak zorunda değil. Performans isteyen kısımları GDNative ile yazıp diğer kısımlar için GDScript ve VisualScript kullanabilirsiniz.

GDNative kullanarak Godot’un resmi olarak desteklemediği dilleri Godot’a ekleyebilirsiniz.

Sahneye Script Eklemek

Bu dersin kalanında Panel ve Button nodelarından oluşan bir sahne oluşturup button’a tıklandığında arkaplanın rengini değiştiren bir script ekleyeceğiz. Bu örnek ile öğreneceklerimiz:

  • Nasıl script yazılır ve bu script bir node’a nasıl iliştirilir.
  • Bir sonraki dersimizin konusu olan sinyallerin kullanımı.
  • Scriptin içinden sahnedeki nodelara nasıl erişilir.

Sahneyi kuralım

Öncelikle yeni bir sahne oluşturun ve Panel ve Button isimli nodeları aşadaki hiyerarşiye göre sahneye ekleyin.

  • Panel
    • Button

2D editöre geçip paneli ve buttonu aşağıdaki resimdeki gibi boyutlandırın ve konumlandırın. Buttona yazı eklemek için Inspectordaki Text özelliğini kullanmalısınız.

Sahnenize bir isim verin ve kaydedin.

Script eklemek

Panelın üzerine gelin ve sağ tıklayın. Sonra açılan menüden “Attach Script”i seçin. Attach Script script iliştir veya ekle anlamına geliyor.

Açılan diyalog ile scriptimizin dilini, sınıf ismini ve bunun gibi diğer alakalı alanları seçebiliyoruz.

GDScript için dosyanın kendisi sınıfı temsil ettiği için class name alanını değiştiremiyoruz.

Scripti Panel node’una ekliyoruz ve bu yüzden Inherits kısmında Panel yazıyor. Scriptimiz Panel node’unun özelliklerini uzatıyor.

Path kısmına scripti kaydetmek istediğiniz lokasyonu girin, bu genelde scriptin eklendiği sahnenin bulunduğu klasör ile aynı olacaktır. Son olarak Create’e tıklayın.

Script oluşturulup node’a eklenecektir. Bir node’un üzerinde script var mı yok mu yanındaki script ikonu ile anlayabiliriz.

Scripti düzenlemek için bu ikona tıklayın. Tıkladıktan sonra Script Editor açılacaktır. Scriptimizi oluştururken Template kısmını Default olarak bıraktığımız için Godot bizim için varsayılan bir kaç fonksiyonu scripte ekledi.

_ready( ) fonksiyonu node ve çocukları aktif olan sahneye girdiğinde çağırılıyor. işareti ile başlayan satırlar yorum olarak geçiyor ve bir etkileri yok. _ready( ) constructor fonksiyonu değil, constructor için _init( ) kullanılıyor. _process(delta) fonksiyonu ise her frame çağırılan bir fonksiyon, delta en son frameden bu yana geçen süreyi temsil ediyor.

Scriptin Rolü

Script bir node’a işlevsellik kazandırır. Scripti bir insanın beyni olarak düşünebilirsiniz. Kaslarımız hareket etme potansiyeline sahip fakat beyin tarafından komut almadıkları sürece bir işe yaramazlar.

Sinyalleri Kullanmak

Sinyaller belirli bir olay gerçekleştiğinde yayılırlar ve bir scriptin içindeki herhangi bir fonksiyona bağlanabilirler. Bir çok node’un kendine özel sinyalleri bulunuyor ve isterseniz kendi özel sinyallerinizde oluşturabiliyorsunuz.

Button node’umuzun “pressed” adında bir sinyali bulunuyor. Bu sinyal butona tıklandığında yayılıyor. Bu sinyali yeni oluşturduğumuz scriptin içinde yazacağımız bir fonksiyona bağlayacağız. İlk önce bağlantıyı oluşturmamız lazım, ondan sonra fonksiyonumuzu tanımlayacağız. Bağlantıyı yapmamız için Godot bize iki yol veriyor. Görsel arayüzü kullanarak veya kod vasıtasıyla. 

Bu seferlik görsel arayüzü kullanacağız. İki seçeneğinde avantajları ve kullanım alanları var. Eğer bağlantıyı yapacağınız node sahneye dinamik olarak ekleniyorsa görsel arayüzü kullanamayacağınız için kod vasıtasıyla bağlamak durumda kalıyorsunuz. Fakat bağlayacağınız node oyunun içinde değişmeyen bir yere sahipse görsel arayüzü kullanabilirsiniz.

 Sahne sekmesinde panelin altında bulunan button node’unu seçin. Sonra Inspector sekmesinin yanında bulunan Node sekmesine tıklayın. Node sekmesinin hemen altında Signals seçeneğinin seçili olduğundan emin olun.

                             

Gördüğünüz gibi pressed() isimli sinyalimiz BaseButton’ın altında bulunuyor. Bu sinyale çift tıkladığınızda veya tıkladıktan sonra sağ alttaki Connect butonuna bastığınızda sinyal bağlantı diyaloğu açılacaktır.

Diyaloğun üst kısmında sahnemizde bulunan nodeların bir listesi bulunuyor. Sinyalin yayıldığı node mavi renk ile vurgulanıyor ve yanında (Connecting From) yazıyor. Scriptimizin bulunduğu “Panel” node’unu seçelim.

Diyaloğun aşağı kısmında ise oluşturulacak olan fonksiyonun ismi yazıyor. Bu fonksiyonun ismi, sinyali yayan node’un ismi ve sinyalin isminden oluşuyor _on_[YayanNode]_[sinyal ismi]. Connect’e basalım ve bağlantımızı oluşturalım.

Godot bizim için bağlantı fonksiyonunu oluşturdu ve scriptimize ekledi.

pass yazan satırı silelim ve yerine 

VisualServer.set_default_clear_color(Color.red)

yazalım.

Sahnenizi F6 ile çalıştırın ve butona tıklayın. Arkaplanın kırmızıya döndüğünü göreceksiniz.

VisualServer Godot’un görüntü ile alakalı olan API’sı. set_default_clear_color ise arkaplanın varsayılan rengini ayarlayan fonksiyon. Biz bu fonksiyona Color.red yazarak varsayılan arkaplan rengini butona basıldığında kırmızıya çevirdik. 

Bu derste scriptler hakkında konuştuk ve ilk scriptimizi yazdık. Bir sonraki derste sinyaller hakkında konuşacağız!

Leave a Reply

Your email address will not be published.