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:

instagram viewer
extends CharacterBody2D

var speed = 300

func _physics_process(delta):
var input_dir = Vector2.ZERO

if Input.is_action_pressed("ui_left"):
input_dir.x -= 1

if Input.is_action_pressed("ui_right"):
input_dir.x += 1

if Input.is_action_pressed("ui_up"):
input_dir.y -= 1

if 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.