Temel görüşü taklit ederek düşmanın hareketini ve davranışını geliştirmek için bu tekniği kullanın.
Görüş hattı tespiti, karakterlerin veya nesnelerin çevrelerini algılamasını sağlayan bir mekanizma ile oyununuza bir karmaşıklık katmanı ekler. Bu özelliği düşman yapay zeka davranışı, oyuncu görünürlük mekaniği, gizli oynanış ve daha fazlası için kullanabilirsiniz.
Godot'ta RayCast2D düğümü, görüş hattı tespitine ulaşmanın basit ve etkili bir yolunu sunar.
Godot Oyununu Kurmak
RayCast2D düğümlerine dalmadan önce Godot 4'te temel bir 2D oyun ortamı oluşturun. Bir oyuncu oluştur klavye girişlerini kullanarak hareket edebilen karakter ve platformlarla etkileşime geçin.
Öncelikle oyuncu karakteri için bir sahne oluşturun. Ekle KarakterBody2D düğümü sahnenin kökü olarak kullanın. İçinde KarakterBody2D, ekle Çarpışma Şekli2D dikdörtgen şekilli ve Sprite2D karakterin görsel temsili için.
Bu makalede kullanılan kod burada mevcuttur GitHub deposu ve MIT lisansı kapsamında kullanımınız ücretsizdir.
Oyuncu hareketi için GDScript kodu:
extends CharacterBody2D
var speed = 300
func _physics_process(delta):
var input_dir = Vector2.ZEROif Input.is_action_pressed("ui_left"):
input_dir.x -= 1if Input.is_action_pressed("ui_right"):
input_dir.x += 1if Input.is_action_pressed("ui_up"):
input_dir.y -= 1if Input.is_action_pressed("ui_down"):
input_dir.y += 1
velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)
Şimdi oyuncunun etkileşim kurabileceği bazı platformlar oluşturun. Kullanabilirsiniz StatikBody2D platformları temsil etmek için uygun çarpışma şekillerine sahip düğümler. Bir platform ortamı oluşturmak için bunları sahnede düzenleyin.
RayCast2D'yi Ayarlama
Görüş hattı tespiti oluşturmak için RayCast2D düğüm. İşte nasıl ekleyebileceğiniz RayCast2D GDScript kullanan düğüm:
var raycast: RayCast2D
func _ready():
raycast = RayCast2D.new()
add_child(raycast)
Bu betiği dosyaya eklediğinizden emin olun. KarakterBody2D düğüm. Bu kod parçacığı yeni bir RayCast2D düğümünü oluşturur ve onu bir çocuk olarak oyuncu karakterine ekler.
Görüş Hattı Etkileşiminde Görsel Geri Bildirim Sağlama
Artık oyuncunun görüş hattı bir platformla kesiştiğinde bir mesaj yazdırabilirsiniz. Oyuncunun bulunduğu yerden hareket yönünde bir ışın yayın. Işın bir nesneye çarparsa bu, oyuncunun platformu görebileceği anlamına gelir.
Aynı betiğe aşağıdaki kodu ekleyin:
func _physics_process(delta):
#... (previous movement code)raycast.target_position = Vector2(100, 0)
if raycast.is_colliding():
print("Collided with platform!")
İşte çıktı:
RayCast2D'nin İşlevselliğini Genişletme
Oyununuzun etkileşimini ve karmaşıklığını önemli ölçüde artırmak için kullanabileceğiniz birçok gelişmiş özellik vardır.
get_collider()
Kullanmak get_collider() yöntemiyle ışının kesiştiği ilk nesneye erişebilirsiniz. Işının yolunda hiçbir nesne yoksa yöntem null değerini döndürür. Bu, özellikle oynatıcınızın görüş hattında olduğu belirli nesneyi tanımlamak için faydalıdır.
if raycast.is_colliding():
var collided_object = raycast.get_collider()
if collided_object:
print("You can see:", collided_object.name)
get_collider_rid()
get_collider_rid() yöntem size kesişen ilk nesnenin Kaynak Kimliğini (RID) söyleyebilir:
if raycast.is_colliding():
var collider_rid = raycast.get_collider_rid()
if !collider_rid.is_valid():
print("No valid object RID")
else:
print("Object RID:", collider_rid)
get_collider_shape()
get_collider_shape() işlev, kesişen ilk nesnenin şekil kimliğini veya çarpışma olmazsa 0'ı döndürür.
if raycast.is_colliding():
var collider_shape = raycast.get_collider_shape()
if collider_shape == 0:
print("No valid shape ID")
else:
print("Shape ID:", collider_shape)
get_collision_normal()
Etkileşimi daha iyi anlamak için, get_collision_normal() size çarpışma noktasındaki şeklin normalini verir. Işının şeklin içinde başladığı durumlarda ve hit_from_inside doğrudur, normal olarak döndürülür Vektör2(0, 0).
if raycast.is_colliding():
var collision_normal = raycast.get_collision_normal()
print("Collision Normal:", collision_normal)
get_collision_point()
Işın bir nesneyle kesiştiğinde, get_collision_point() çarpışmanın tam noktasını küresel koordinatlarda döndürür.
if raycast.is_colliding():
var collision_point = raycast.get_collision_point()
print("Collision Point:", collision_point)
Bu gelişmiş yeteneklerini kullanarak RayCast2D düğümü kullanarak ışın ve çarpışan nesneler arasındaki etkileşimlere ilişkin kritik bilgiler edinebilirsiniz.
Bu yöntemler, oyun mekaniklerini, nesne etkileşimlerini ve oyuncu geri bildirimlerini önemli ölçüde etkileyebilecek temel bilgileri toplamanızı sağlar.
Ek Özellikler Dahil
Temel görüş hattı algılama işlevinin yanı sıra, bazı gelişmiş özellikleri uygulayarak oyununuzun dinamiklerini daha da geliştirebilirsiniz.
Etkinlik Tetikleyicileri
Yalnızca bir mesaj yazdırmak yerine belirli oyun içi etkinlikleri tetikleyebilirsiniz. Örneğin, gizli yolları ortaya çıkarmak, mekanizmaları etkinleştirmek veya düşmanları oyuncunun varlığından haberdar etmek oyununuza derinlik katabilir.
Dinamik Engellerle Mücadele
Engellerin görüş hattını engelleyebileceği senaryoları düşünün. Dinamik engel algılamanın uygulanması, nesneler oyuncunun görüş alanına girip çıktıkça görüş hattının gerçek zamanlı olarak güncellenmesini sağlar.
Özel Görsel Göstergeler
Yalnızca metne güvenmek yerine, görüş hattı etkileşimlerinin varlığını vurgulamak için özel görsel göstergeler oluşturabilirsiniz. Bu, oynatıcının veya nesne karakterinin rengini değiştirmeyi, bir simge görüntülemeyi veya ilgili öğelerin animasyonu.
Savaş Mekaniğinin Sisi
Strateji veya keşif odaklı oyunlar için savaş sisi mekaniğini tanıtabilirsiniz. Bu, oyuncunun görüşünü bir görüş hattı oluşturana kadar kısıtlayarak oyun dünyasını kademeli olarak ortaya çıkarır ve stratejik karar almayı teşvik eder.
Görüş Hattı Tespiti için En İyi Uygulamalar
Görüş hattı tespitini optimize etmek, sorunsuz bir oyun deneyimi sürdürmek için çok önemlidir. Akılda tutulması gereken bazı en iyi uygulamaları burada bulabilirsiniz.
Raycast Frekansı
Gerekmiyorsa her karede raycast yapmaktan kaçının. Görüş hattını yalnızca oyuncunun konumu veya ortamı önemli ölçüde değiştiğinde kontrol etmeyi düşünün. Bu, gereksiz hesaplamaların azaltılmasına yardımcı olur.
Işın Uzunluğu
Raycast'inizin uzunluğunu dengeleyin. Son derece uzun ışınlar performansı etkileyebilir; bu nedenle, hesaplama yükünü kontrol altında tutarken gerekli alanı kapsayan bir uzunluk seçin.
Çarpışma Katmanları
Görüş hattı algılamasının hangi nesneleri dikkate alacağını ayarlamak için çarpışma katmanlarını ve maskeleri kullanın. Bu, alakasız nesnelere gereksiz ışın yayınlarını önler.
Sonuçları Önbelleğe Alma
Birden fazla nesne veya kare için aynı görüş hattı algılamasını gerçekleştiriyorsanız gereksiz hesaplamaları önlemek için sonuçları önbelleğe almayı düşünün.
Platform Düzeyinde Entegrasyon
Görüş hattı tespit mekanizmalarınızı seviye tasarımıyla hizalayın. platform oyununuz. Ortamın dikeyliğini, farklı platform yüksekliklerini ve görüş hattını engelleyebilecek potansiyel engelleri göz önünde bulundurun.
Kusursuz ve sezgisel bir oyuncu deneyimi yaratmak için algılama sisteminizin bu nüansları karşıladığından emin olun.
Görüş Hattı Tespiti ile Godot Oyunlarını Daha İlgi Çekici Hale Getirme
Görüş hattı tespiti oyun dünyanıza derinlik ve gerçekçilik katar. Oyuncular, görüş açılarına göre farklı stratejiler belirleyebilir, gizleyebilir veya zorluklara farklı şekilde yaklaşabilirler. Bu mekanik, basit bir platform oyununu daha sürükleyici bir deneyime dönüştürerek oyunu daha ilgi çekici ve akılda kalıcı hale getirebilir.