Çarpışma tespiti, oyuncunuzun platformda nasıl durduğundan düşmanları nasıl yok ettiğine kadar oyununuzun çoğu bölümünü etkiler.

Çarpışma tespiti, oyun geliştirmenin kritik yönlerinden biridir ve oyuncu deneyimini önemli ölçüde etkiler. Doğru çarpışma tespiti, oyun karakterlerinin çevreleriyle kusursuz bir şekilde etkileşime girmesini sağlayarak, sarmallık ve gerçekçilik hissi yaratır.

Popüler bir açık kaynaklı oyun motoru olan Godot, etkili çarpışma algılamayı uygulamak için güçlü araçlar sağlayarak akıcı ve ilgi çekici bir oyun deneyimi sağlar.

Godot Oyununu Kurmak

Başlamadan önce Godot 4'te basit bir 2D platform oyunu oluşturun. Oyun sahnesini bir oyuncu karakteri ve platformlarla kurarak başlayın.

Bu makalede kullanılan kod burada mevcuttur GitHub deposu ve MIT lisansı kapsamında kullanımınız ücretsizdir.

Yeni bir sahne oluşturun ve ekleyin KarakterBody2D düğümü kök düğüm olarak kullanın. Ekle Sprite2D düğümün çocuğu olarak KarakterBody2D Oyuncu karakterini görsel olarak temsil etmek için.

instagram viewer

Sonraki, oynatıcıya hareket ekleyin GDScript kullanan karakter:

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)

Son olarak, kullanarak sahneye platformlar ekleyin. StatikBody2D Temel kurulumu tamamlamak için düğümler.

Farklı Çarpışma Şekilleri

Godot, farklı türdeki oyun nesnelerine hitap eden çeşitli çarpışma şekilleri sağlar. Bu çarpışma şekilleri, çarpışma tespitinin gerçekleştiği alanın doğru bir şekilde tanımlanmasına yardımcı olur.

Çeşitli çarpışma şekillerine dalmadan önce, çarpışma alanını tanımlamak için doğrudan oyuncu karakterine bir tane ekleyebileceğinizi unutmamak önemlidir. Bu, çarpışmayı tespit etmek için hassas bölgeyi kontrol etmenize olanak tanır.

Daire Çarpışma Şekli

Dairesel çarpışma şekli özellikle çevreyle radyal olarak etkileşime girmesi gereken karakterler için kullanışlıdır. Bu şekli dairesel veya küresel isabet alanına sahip karakterler için kullanabilirsiniz. Oyuncu karakterinize daire çarpışma şekli eklemek için:

# Inside the player character's script
var collision_shape = CollisionShape2D.new()
var circle_shape = CircleShape2D.new()
circle_shape.radius = 32
collision_shape.shape = circle_shape
add_child(collision_shape)

Dikdörtgen Çarpışma Şekli

Dikdörtgen çarpışma şekilleri, daha kutulu veya dikdörtgen biçimli karakterler için uygundur. Dikdörtgen çarpışma şeklini şu şekilde ekleyebilirsiniz:

# Inside the player character's script
var collision_shape = CollisionShape2D.new()
var rect_shape = RectangleShape2D.new()
rect_shape.extents = Vector2(32, 64)
collision_shape.shape = rect_shape
add_child(collision_shape)

Dışbükey Çokgen Çarpışma Şekli

Dışbükey çokgen çarpışma şekilleri, düzensiz veya dikdörtgen olmayan formlara sahip karakterler için büyük esneklik sağlar. Bu şekli karakterinizin dış hatlarına yakından uyacak şekilde kullanabilirsiniz. Dışbükey çokgen çarpışma şekli eklemek için:

# Inside the player character's script
var collision_shape = CollisionShape2D.new()
var polygon_shape = ConvexPolygonShape2D.new()
polygon_shape.set_points([Vector2(-32, -64), Vector2(32, -64), Vector2(0, 64)])
collision_shape.shape = polygon_shape
add_child(collision_shape)

Uygun çarpışma şeklini seçip onu oyuncu karakterine ekleyerek tam olarak belirlenen alan içindeki çarpışmaları tespit ederek oyunla etkileşimlerin doğruluğunu artırır dünya.

Çarpışmaları Algılama

Nesneler arasındaki çarpışmaları tespit etmek, etkileşimleri ve oyun mekaniğini uygulamak için çok önemlidir. Godot'ta bunu yerleşik fizik motorunu kullanarak başarabilirsiniz.

# Detecting Collisions in _physics_process
func _physics_process(delta):
var input_dir = Vector2.ZERO
#... (input handling)

velocity = input_dir.normalized() * speed
var collision = move_and_collide(velocity * delta)

if collision:
print("collided")

Çıktı aşağıdadır:

Çarpışma Sinyalleri ve Çarpışma Maskeleri

Godot, oyununuza karmaşıklık katacak güçlü araçlar olarak çarpışma sinyalleri ve çarpışma maskeleri sağlar.

Çarpışma Sinyalleri

Çarpışma sinyalleri, çarpışma meydana geldiğinde fizik motorunun tetiklediği olaylardır. Bu sinyaller nesnelerin birbirleriyle iletişim kurması ve çarpışmalara yanıt vermesi için bir yol sağlar. Godot'ta, belirli çarpışma olayları gerçekleştiğinde özel mantığı yürütmek için çarpışma sinyallerine bağlanabilirsiniz.

Örneğin, oyuncu karakteri koleksiyonluk bir öğeyle çarpıştığında bir ses efekti çalmak istediğinizi varsayalım. Çarpışma sinyallerini kullanarak bunu nasıl başarabileceğiniz aşağıda açıklanmıştır:

# Inside the player character's script
func _ready():
connect("body_entered", self, "_on_body_entered")

func _on_body_entered(body: Node):
if body.is_in_group("collectible"):
# Play a sound effect
play_collectible_sound()

# Perform additional logic like collecting the item

# Remove the collectible from the scene
body.queue_free()

Bu örnekte, body_entered Oyuncu karakteri başka bir fizik gövdesiyle çarpıştığında sinyal yayılır. Bu sinyali bağlayarak _on_body_entered işleviyle çarpışma olayına yanıt verebilirsiniz. Çarpışan cisim içeride ise tahsil edilebilir grup yapabilirsiniz telif hakkı olmayan bir ses efekti çal.

Çarpışma Maskeleri

Çarpışma maskeleri, hangi çarpışma katmanlarının birbiriyle etkileşime girebileceğini kontrol etmenize olanak tanır. Her çarpışma katmanı, bit maskesindeki bir bit'e karşılık gelir. Nesnelere çarpışma katmanları ve maskeleri atayarak hangi nesnelerin birbiriyle çarpışacağına ince ayar yapabilir ve performansı optimize edebilirsiniz.

Mesela oyununuzda düşmanlarınızın ve mermilerinizin olduğunu hayal edin. Düşmanların birbirleriyle değil platformlarla çarpışmasını istiyorsunuz. Ayrıca mermilerin platformlarla değil düşmanlarla çarpışmasını istiyorsunuz. Çarpışma maskelerini kullanarak bunu nasıl başarabileceğiniz aşağıda açıklanmıştır:

# Inside the enemy's script
func _ready():
# Disable collision with other enemies
set_collision_mask_value(2, false)

# Enable collision with platforms
set_collision_mask_value(3, true)

# Inside the bullet's script
func _ready():
# Enable collision with enemies
set_collision_mask_value(2, true)

# Disable collision with platforms
set_collision_mask_value(3, false)

Çarpışma maskelerini seçerek etkinleştirerek veya devre dışı bırakarak, hangi nesnelerin birbiriyle çarpışabileceğini kontrol ederek doğru ve verimli çarpışma etkileşimleri elde edersiniz.

Çarpışma Algılama için En İyi Uygulamalar

Sorunsuz bir oyun deneyimi ve etkili çarpışma algılaması sağlamak için bu en iyi uygulamaları göz önünde bulundurun.

Basit Şekiller Kullanın

Karmaşık çarpışma şekilleri kaynak yoğun olabilir. Mümkün olduğunda çarpışma tespiti için daire ve dikdörtgen gibi basit şekilleri kullanın.

Katman Çarpışma Maskeleri

Godot çarpışma katmanlarını ve maskelerini tanımlamanıza olanak tanır. Hangi nesnelerin birbiriyle çarpışacağını kontrol etmek ve performansı optimize etmek için bunları kullanın.

Örneğin bir platform oyununda oyuncu platformlara atlayabilir ve duvarlar boyunca kaydırın. Çarpışma katmanlarını ve maskelerini uygun şekilde ayarlayarak farklı davranışlar elde edebilirsiniz.

Çarpışma Grupları

Daha kolay yönetim ve etkili çarpışma tespiti için benzer çarpışma özelliklerine sahip nesneleri gruplandırın.

Sınırlayıcı Kutular

Performans optimizasyonu için, hassas çarpışma tespiti yapmadan önce nesnelerin yakında olup olmadığını hızlı bir şekilde kontrol etmek üzere sınırlayıcı kutuları kullanın.

Kinematik Sorguları Kullan

Godot, nesneyi gerçekten hareket ettirmeden çarpışma kontrolleri gerçekleştirmek için kinematik sorgular sağlar. Bu, çarpışmaları gerçekleşmeden önce tahmin etmek için yararlı olabilir.

Çarpışma Tespiti ile Godot Oyunlarını Daha İlgi Çekici Hale Getirme

Etkin çarpışma tespitini Godot oyununuza dahil etmek yalnızca kusursuz etkileşim sağlamakla kalmaz karakterler ve çevre arasında bağlantı kurmanın yanı sıra yaratıcı oyun fırsatlarının da kapısını aralar mekanik.

İster platform zorlukları, ister bulmaca çözme veya savaş senaryoları olsun, çarpışma tespiti oyuncu katılımının merkezinde yer alır. Çarpışma algılamayı ekleyerek, akıcı ve dinamik etkileşimleriyle oyuncuları büyüleyen bir oyun yaratabilirsiniz.