Godot Engine – Sık Kullanılan Fonksiyonlar

Godot oyun motoru, oyun geliştirme sürecini kolaylaştırmak için bir dizi kullanışlı fonksiyon ve özellik içerir. En sık kullanılan bazı Godot fonksiyonları:

  1. _ready() veya _init(): Bu işlevler, bir düğümün veya nesnenin sahneye eklenmesi veya başlatılması sırasında çağrılır. Genellikle başlangıç ayarlarını yapmak veya özel başlangıç kodunu çalıştırmak için kullanılır.
  2. _process(delta): Bu işlev, her karede bir kez çağrılır ve genellikle oyun nesnelerinin her çerçevede nasıl güncelleneceğini belirlemek için kullanılır. “delta” parametresi, zaman adımları arasındaki süreyi temsil eder.
  3. _physics_process(delta): Fizik tabanlı oyunlar için _process() benzeri bir işlevdir, ancak bu işlev, fizik tabanlı hesaplamaları yapmak için kullanılır. Bu, nesnelerin fiziksel davranışlarını yönetmek için önemlidir.
  4. get_node(path): Bu fonksiyon, düğüm ağacındaki başka bir düğümü bulmak için kullanılır. “path” parametresi, düğümün sahne ağacındaki konumunu belirler.
  5. connect(signal, target, method): Bu işlev, bir sinyali bir işlevle bağlamak için kullanılır. Örneğin, bir düğümün tıklama sinyalini bir işlevle ilişkilendirebilirsiniz.
  6. instance(): veya preload(path): Bu işlevler, sahnede veya kaynaklarda bulunan nesneleri klonlamak veya yüklemek için kullanılır. instance() o anlık bir nesne yaratırken, preload(path) bir kaynağı önceden yükler.
  7. queue_free(): Bu fonksiyon, bir düğümü bellekten serbest bırakmak ve yok etmek için kullanılır. Oyun nesnelerini silmek için sıkça kullanılır.
  8. emit_signal(signal, ...args): Bu işlev, özel sinyalleri tetiklemek için kullanılır. Sinyal adı ve isteğe bağlı olarak ekstra argümanlar verilebilir.
  9. get_input_event(): Bu işlev, kullanıcının giriş etkinliklerini almak için kullanılır. Fare tıklamaları, klavye tuş vuruşları gibi etkinlikleri işlemek için kullanılabilir.
  10. get_viewport().get_mouse_position(): Bu işlev, fare pozisyonunu almak için kullanılır. Bu, kullanıcı etkileşimlerini işlemek için sıklıkla kullanılır.

Godot Engine – Avantajları ve Dezavantajları

Godot Engine, popüler Unity ve Unreal Engine gibi diğer oyun motorlarına göre, 2023 yılında yapılan kıyaslamalarda farklı avantajlara ve dezavantajlara sahiptir. Bu üç oyun motorunu karşılaştırdığımızda;

Godot Engine:

Artıları:

  1. Ücretsiz ve Açık Kaynaklı: Godot Engine, ücretsizdir ve açık kaynaklı bir lisansa sahiptir, bu da maliyetleri azaltır ve kodunuzu özelleştirmenize izin verir.
  2. Hafif ve Hızlı: Godot, daha hafif bir motor olarak bilinir ve düşük sistem gereksinimlerine sahiptir, bu nedenle daha küçük projeler veya eski cihazlar için uygundur.
  3. Düşük Öğrenme Eğrisi: Kullanıcı dostu bir arayüze sahiptir ve GDScript gibi kolay öğrenilen programlama dillerini destekler.
  4. Çoklu Platform Desteği: Birden fazla platformda oyun geliştirmeyi destekler.
  5. Topluluk ve Dökümantasyon: Godot, büyük ve aktif bir topluluğa sahiptir ve kapsamlı dökümantasyon sunar.

Eksileri:

  1. Daha Az 3D Odaklı: Godot, 3D oyunlar için Unity veya Unreal Engine kadar güçlü olmayabilir.
  2. Daha Az Pazarlama ve Destek: Unity ve Unreal Engine gibi diğer motorlar, daha büyük bir pazarlama ve destek ekosistemine sahiptir.

Unity:

Artıları:

  1. Geniş Platform Desteği: Unity, birçok platformu destekler, bu da oyununuzun çoklu platformlarda yayınlanmasını kolaylaştırır.
  2. Varlık Mağazası: Unity Asset Store, hazır varlıkların ve eklentilerin geniş bir koleksiyonunu sunar.
  3. Gelişmiş 3D Yetenekleri: Unity, 3D oyun geliştirme için güçlü araçlar sunar.
  4. Büyük Topluluk ve Destek: Büyük bir kullanıcı topluluğuna ve destek ekosistemine sahiptir.

Eksileri:

  1. Ücretli Sürümler: Unity Pro ve Unity Plus gibi gelişmiş özellikler için ücretli sürümleri vardır.
  2. Öğrenme Eğrisi: Unity, bazı kullanıcılar için öğrenmesi daha zor olabilir.

Unreal Engine:

Artıları:

  1. Güçlü Grafikler ve 3D: Unreal Engine, üst düzey grafikler ve 3D oyun geliştirme için güçlüdür.
  2. Mükemmel 3D Desteği: Oyun geliştirmenin yanı sıra simülasyonlar ve görselleştirmeler için de kullanılabilir.
  3. Mükemmel VR ve AR Desteği: Unreal Engine, sanal gerçeklik ve artırılmış gerçeklik projeleri için popüler bir seçenektir.
  4. Gelişmiş Öğrenme Kaynakları: Unreal Engine, eğitim ve öğrenme kaynaklarına sahiptir.

Eksileri:

  1. Ağırlık ve Yüksek Sistem Gereksinimleri: Unreal Engine, daha yüksek sistem gereksinimlerine sahiptir ve daha büyük projeler için daha fazla kaynağa ihtiyaç duyar.
  2. Öğrenme Eğrisi: Unreal Engine, Unity ve Godot’a göre daha karmaşıktır ve öğrenmesi daha uzun sürebilir.
  3. Ücretli Lisanslama: Unreal Engine, oyununuzun ticari bir başarı elde etmesi durumunda bir ücret talep eder.

Hangi oyun motorunun sizin için en iyi olduğu, projenizin gereksinimlerine ve kendi deneyim ve tercihlerinize bağlıdır. Küçük veya bağımsız bir geliştiriciyseniz ve 2D oyunlar geliştirmeyi düşünüyorsanız, Godot Engine cazip olabilir. Büyük bir 3D proje üzerinde çalışıyorsanız, Unity veya Unreal Engine daha iyi bir seçenek olabilir.

Godot Engine Hakkında

Godot Engine, açık kaynaklı ve ücretsiz olarak kullanılabilen bir oyun motorudur. Godot Engine’i diğer oyun motorlarıyla karşılaştırırken göz önünde bulundurabileceğiniz bazı önemli faktörler:

  1. Ücretsiz ve Açık Kaynaklı: Godot Engine, ücretsizdir ve açık kaynaklı bir lisansa sahiptir. Bu, oyun geliştirme maliyetlerinizi düşürebilir ve kodunuzu özelleştirmenize veya paylaşmanıza olanak tanır.
  2. Çok Platform Desteği: Godot, birden fazla platformda oyun geliştirmeyi destekler. Windows, macOS, Linux, iOS, Android, HTML5, ve daha pek çok platformda oyunlar oluşturabilirsiniz.
  3. Kolay Kullanım: Godot Engine, kullanıcı dostu bir arayüze ve sezgisel bir düzenleyiciye sahiptir. Bu, yeni başlayanlar için öğrenmesi kolaydır.
  4. Çoklu Dil Desteği: Godot, birçok farklı programlama dilini destekler. Özellikle GDScript adlı dil, Python benzeri bir yapıya sahiptir ve Godot’a özeldir. Bunun dışında C#, C++, VisualScript, ve Rust gibi dillere de destek vardır.
  5. Oyun Motoru Özellikleri: Godot, 2D ve 3D oyun geliştirme için kapsamlı özelliklere sahiptir. Fizik simülasyonları, animasyonlar, ses desteği, veritabanı bağlantıları ve çok daha fazlasını içerir.
  6. Topluluk ve Destek: Godot, büyük ve aktif bir topluluğa sahiptir. Kullanıcılar arası yardımlaşma ve çevrimiçi kaynaklara kolay erişim sunar.
  7. Dökümantasyon: Godot, kapsamlı ve kullanıcı dostu bir dökümantasyona sahiptir. Bu, geliştirme sürecinizi kolaylaştırabilir.
  8. İleri Seviye Kontrol: İleri düzey oyun geliştiricileri için Godot, gelişmiş özelleştirme seçenekleri sunar ve karmaşık oyun mekaniği oluşturmanıza olanak tanır.
  9. Oyun Dağıtımı: Godot, oyunlarınızın dağıtımını ve pazarlama işlemlerini kolaylaştıran araçlar sunar.

Ancak, Godot’u tercih etmek için dikkate almanız gereken birkaç faktör vardır. Özellikle belirli bir platform için özel bir oyun geliştiriyorsanız, diğer oyun motorları belki daha fazla kaynak ve desteğe sahip olabilirler. Ayrıca, Godot’un bazı alanlarda diğer oyun motorlarına kıyasla daha az geniş bir eklenti ve üçüncü taraf entegrasyonları yelpazesi olabilir.

Sonuç olarak, Godot Engine, özellikle açık kaynaklı ve ücretsiz bir oyun motoru arayanlar için cazip bir seçenek olabilir. Ancak, her proje ve gereksinim farklıdır, bu yüzden seçim yapmadan önce ihtiyaçlarınızı ve hedeflerinizi dikkatlice değerlendirmeniz önemlidir.

Godot Engine – RigidBody vs KinematicBody

Godot oyun motorunda, RigidBody ve KinematicBody iki farklı fizik özelliği sunar ve bunlar arasında önemli farklar vardır. Bu iki fizik özelliğinin temel farkları şu şekildedir:

  1. RigidBody:
  • RigidBody, gerçek fizik simülasyonu kullanır ve nesneler arasındaki çarpışmaları hesaplar.
  • RigidBody nesneleri, kütle, hız, ivme ve çarpışma tepkisi gibi fiziksel özelliklere sahip olabilir.
  • Diğer RigidBody nesneleri, StaticBody nesneleri veya KinematicBody nesneleri gibi diğer fiziksel nesnelerle çarpışabilir ve bu çarpışmalar fiziksel olarak hesaplanır.
  • RigidBody nesneleri, yerçekimi tarafından etkilenir ve kütleleri nedeniyle diğer fizik nesneleri itebilir veya çekebilir.
  1. KinematicBody:
  • KinematicBody, gerçek zamanlı fizik simülasyonu yerine kod tarafından yönetilen fizik simülasyonunu kullanır.
  • KinematicBody nesneleri, fiziksel özelliklerini kodunuzu kullanarak kontrol edebilirsiniz. Örneğin, hızlarını veya pozisyonlarını doğrudan ayarlayabilirsiniz.
  • KinematicBody nesneleri, çarpışma algılama ve tepki için kod tarafından yönetilen mantık kullanır. Bu nedenle, çarpışma tepkilerini özelleştirmek daha esnek olabilir.
  • KinematicBody nesneleri, yerçekimi tarafından etkilenmezler ve yerçekimi etkisi altında serbestçe düşmezler. Bu nedenle, yerçekimi ile ilgili özel bir işlem yapmanız gerekir.

Hangi fizik özelliğinin kullanılması gerektiği, oyunun gereksinimlerine bağlıdır. Eğer gerçekçi bir fizik simülasyonu gerekiyorsa ve nesnelerin kendi aralarında ve diğer fizik nesneleriyle etkileşime girmesi gerekiyorsa RigidBody daha uygun olabilir. Ancak daha fazla kontrol ve özelleştirme gerekiyorsa veya daha karmaşık fizik kuralları uygulanması gerekiyorsa KinematicBody tercih edilebilir. Ayrıca, bazen her iki türü de aynı oyun içinde kullanmak da mümkün olabilir.

Godot Engine – GDScript: _on_body_entered

_on_body_entered Godot oyun motorunun bir olay işleyici fonksiyonudur. Bu fonksiyon, bir fizik cisminin başka bir fizik cisminin sınırlarına girdiği anı işlemek için kullanılır. Bu genellikle çarpışma algılama ve tepkileri uygulamak için kullanılır.

Örneğin, bir karakterin düşmanla çarpıştığı anı yakalamak ve buna tepki vermek için _on_body_entered fonksiyonunu kullanabilirsiniz.

İşte bu fonksiyonun kullanımı hakkında temel bir örnek:

extends Area2D

# Bu işlev, bu nesnenin sınırlarına başka bir fizik cisminin girdiği anı işler.
func _on_body_entered(body):
    if body.is_in_group("enemies"):
        # Eğer çarpışan cisim düşman grubuna aitse
        queue_free()  # Kendi nesneyi yok et

Bu örnek, bir Area2D nesnesinin sınırlarına başka bir fizik cisminin girdiği anı kontrol eder. Eğer çarpışan cisim “enemies” adlı bir gruba aitse, bu nesne kendisini yok eder.

Bunun yanı sıra, _on_body_entered fonksiyonunu, çeşitli olayları yakalamak ve nesneler arasında etkileşimleri uygulamak için kullanabilirsiniz. Bu fonksiyonun tam olarak nasıl kullanılacağı, projenizin gereksinimlerine bağlı olarak değişebilir.

Godot Engine – Sinyaller

Sinyaller, bu oyun motorunda olay işleme (event handling) ve iletişim için kullanılan önemli bir kavramdır. Sinyaller, bir nesnenin belirli bir olayın meydana geldiğini bildirmesine (emitting) ve bu olaya tepki veren başka nesnelerin bu sinyali dinlemesine olanak tanır.

Bu, özellikle oyunlar için; örneğin karakterlerin öldüğü, bir düşmanın vurulduğu veya bir kapının açıldığı gibi etkileşimlerin daha karmaşık olduğu durumlarda yararlıdır. Godot Signals, bu etkileşimleri daha kolay ve daha etkili bir şekilde ele almamızı sağlar.

Bir butona basıldığı anda (on pressed) hareket eden karakteri durdurmak istersek:

1) Sahneye bir karakter (sprite) ve bir buton ekleyin.

2) Butona tıkladıktan sonra yerleşimin sağ kısmında bulunan “Node” penceresinden, pressed() sinyalini seçerek script atayın.

extends Sprite

var speed = 400
var angular_speed = PI


func _process(delta):
	rotation += angular_speed * delta
	var velocity = Vector2.UP.rotated(rotation) * speed
	position += velocity * delta

func _on_Button_pressed():
	set_process(not is_processing())

set_process() fonksiyonu _process’i aktif ve pasif hale getirmemizi sağlamaktadır.

Godot Engine – GDScript: Karakter Hareketi

extends Sprite

var speed = 400
var angular_speed = PI

#sadece ileri ve kendi etrafında dönme (move forward + turn around itself)
func _process(delta):
	var direction = 0
	
	if(Input.is_action_pressed("ui_left")):
		direction -=1
	if(Input.is_action_pressed("ui_right")):
		direction +=1

	rotation += angular_speed * direction * delta
	
	
	var velocity = Vector2.ZERO
	
	if(Input.is_action_pressed("ui_up")):
		velocity = Vector2.UP.rotated(rotation) * speed
	
	position += delta * velocity

Godot Engine – GDScript: Karakter Döndürme

Godot’da bir karakteri belirli bir yöne döndürmek için Vector2.UP.rotated fonksiyonunu kullanabilirsiniz. Bu fonksiyon, verilen bir açı değerine göre bir vektörü döndürmeye yarar. Genellikle bu fonksiyon, karakterin yönünü belirlemek ve animasyonları yönlendirmek için kullanılır.

#GDScript Sprite.gd

extends Sprite

var speed = 400;
var angular_speed= PI;


func _process(delta):
	rotation += PI * delta;
	
	var velocity = Vector2.UP.rotated(rotation) * speed;
	position += velocity * delta