Deteksi tabrakan memengaruhi sebagian besar permainan Anda, mulai dari cara pemain Anda berdiri di platform hingga cara mereka menghancurkan musuh.

Deteksi tabrakan adalah salah satu aspek penting dalam pengembangan game, yang berdampak signifikan terhadap pengalaman pemain. Deteksi tabrakan yang akurat memastikan karakter game berinteraksi secara lancar dengan lingkungannya, menciptakan kesan mendalam dan realisme.

Godot, mesin permainan sumber terbuka yang populer, menyediakan alat canggih untuk menerapkan deteksi tabrakan yang efisien, sehingga menghasilkan permainan yang lancar dan menarik.

Menyiapkan Game Godot

Sebelum memulai, buatlah game platformer 2D sederhana di Godot 4. Mulailah dengan menyiapkan adegan permainan dengan karakter pemain dan platform.

Kode yang digunakan dalam artikel ini tersedia di sini Repositori GitHub dan gratis untuk Anda gunakan di bawah lisensi MIT.

Buat adegan baru dan tambahkan a KarakterTubuh2D simpul sebagai simpul akar. Tambah sebuah Sprite2D simpul sebagai anak dari KarakterTubuh2D untuk mewakili karakter pemain secara visual.

instagram viewer

Berikutnya, menambahkan gerakan ke pemain karakter menggunakan GDScript:

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)

Terakhir, tambahkan platform ke tempat kejadian menggunakan Tubuh Statis2D node untuk menyelesaikan pengaturan dasar.

Bentuk Tabrakan yang Berbeda

Godot menyediakan berbagai bentuk tabrakan yang sesuai dengan jenis objek permainan yang berbeda. Bentuk tabrakan ini membantu menentukan secara akurat area di mana deteksi tabrakan terjadi.

Sebelum mendalami berbagai bentuk tabrakan, penting untuk dicatat bahwa Anda dapat melampirkannya langsung ke karakter pemain untuk menentukan area tabrakannya. Hal ini memungkinkan Anda mengontrol wilayah yang tepat untuk mendeteksi tabrakan.

Bentuk Tabrakan Lingkaran

Bentuk tabrakan lingkaran sangat berguna untuk karakter yang perlu berinteraksi dengan lingkungan secara radial. Anda dapat menggunakan bentuk ini untuk karakter dengan hitbox melingkar atau bulat. Untuk menambahkan bentuk tabrakan lingkaran ke karakter pemain Anda:

# 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)

Bentuk Tabrakan Persegi Panjang

Bentuk tumbukan persegi panjang cocok untuk karakter dengan bentuk yang lebih kotak atau persegi panjang. Berikut cara menambahkan bentuk tumbukan persegi panjang:

# 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)

Bentuk Tabrakan Poligon Cembung

Bentuk tumbukan poligon cembung memberikan fleksibilitas yang besar untuk karakter dengan bentuk tidak beraturan atau non-persegi panjang. Anda dapat menggunakan bentuk ini agar sesuai dengan garis besar karakter Anda. Untuk menambahkan bentuk tumbukan poligon cembung:

# 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)

Dengan memilih bentuk tabrakan yang sesuai dan menempelkannya pada karakter pemain, Anda bisa melakukannya dengan tepat mendeteksi tabrakan di dalam area yang ditentukan, meningkatkan akurasi interaksi dengan game dunia.

Mendeteksi Tabrakan

Mendeteksi tabrakan antar objek sangat penting untuk mengimplementasikan interaksi dan mekanisme gameplay. Di Godot, Anda dapat mencapainya menggunakan mesin fisika bawaan.

# 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")

Di bawah ini adalah hasilnya:

Sinyal Tabrakan dan Masker Tabrakan

Godot memberikan sinyal tabrakan dan masker tabrakan sebagai alat yang ampuh untuk menambah kecanggihan pada game Anda.

Sinyal Tabrakan

Sinyal tumbukan adalah peristiwa yang dipicu oleh mesin fisika ketika terjadi tumbukan. Sinyal-sinyal ini memberikan cara bagi objek untuk berkomunikasi satu sama lain dan merespons tabrakan. Di Godot, Anda dapat terhubung ke sinyal tabrakan untuk menjalankan logika khusus ketika peristiwa tabrakan tertentu terjadi.

Misalnya, Anda ingin memainkan efek suara saat karakter pemain bertabrakan dengan item koleksi. Inilah cara Anda mencapainya dengan menggunakan sinyal tabrakan:

# 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()

Dalam contoh ini, tubuh_masuk sinyal dipancarkan ketika karakter pemain bertabrakan dengan badan fisika lain. Dengan menghubungkan sinyal ini ke _pada_tubuh_masuk fungsi, Anda dapat merespons peristiwa tabrakan. Jika benda yang bertabrakan berada di dalam tertagih kelompok, kamu bisa memutar efek suara bebas hak cipta.

Masker Tabrakan

Masker tabrakan memungkinkan Anda mengontrol lapisan tabrakan mana yang dapat berinteraksi satu sama lain. Setiap lapisan tabrakan berhubungan dengan bit dalam bitmask. Dengan menetapkan lapisan dan masker tabrakan ke objek, Anda dapat menyempurnakan objek mana yang bertabrakan satu sama lain dan mengoptimalkan performa.

Misalnya, bayangkan Anda memiliki musuh dan peluru di dalam game Anda. Anda ingin musuh bertabrakan dengan platform tetapi tidak dengan satu sama lain. Anda juga ingin peluru bertabrakan dengan musuh tetapi tidak dengan platform. Inilah cara Anda dapat mencapainya dengan menggunakan masker tabrakan:

# 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)

Dengan mengaktifkan atau menonaktifkan masker tabrakan secara selektif, Anda mengontrol objek mana yang dapat saling bertabrakan, sehingga menghasilkan interaksi tabrakan yang akurat dan efisien.

Praktik Terbaik untuk Deteksi Tabrakan

Untuk memastikan gameplay yang lancar dan deteksi tabrakan yang efisien, pertimbangkan praktik terbaik berikut.

Gunakan Bentuk Sederhana

Bentuk tabrakan yang rumit dapat menghabiskan banyak sumber daya. Kapan pun memungkinkan, gunakan bentuk sederhana seperti lingkaran dan persegi panjang untuk mendeteksi tabrakan.

Masker Tabrakan Lapisan

Godot memungkinkan Anda menentukan lapisan dan masker tabrakan. Gunakan ini untuk mengontrol objek mana yang saling bertabrakan, sehingga mengoptimalkan kinerja.

Misalnya saja pada game platformer pemain mungkin melompat ke platform dan meluncur di sepanjang dinding. Dengan menyiapkan lapisan tabrakan dan masker dengan tepat, Anda dapat mencapai perilaku yang berbeda.

Grup Tabrakan

Kelompokkan objek dengan properti tabrakan serupa untuk pengelolaan yang lebih mudah dan deteksi tabrakan yang efisien.

Kotak Pembatas

Untuk optimalisasi kinerja, gunakan kotak pembatas untuk memeriksa dengan cepat apakah ada objek di dekatnya sebelum melakukan deteksi tabrakan yang tepat.

Gunakan Kueri Kinematik

Godot menyediakan query kinematik untuk melakukan pemeriksaan tabrakan tanpa benar-benar menggerakkan objek. Hal ini berguna untuk memprediksi tabrakan sebelum terjadi.

Membuat Game Godot Lebih Menarik Dengan Deteksi Tabrakan

Menggabungkan deteksi tabrakan yang efisien dalam game Godot Anda tidak hanya memastikan interaksi yang lancar antara karakter dan lingkungan tetapi juga membuka peluang untuk gameplay yang kreatif mekanika.

Baik itu tantangan platforming, pemecahan teka-teki, atau skenario pertempuran, deteksi tabrakan adalah inti dari keterlibatan pemain. Dengan menambahkan deteksi tabrakan, Anda dapat membuat game yang memikat pemain dengan interaksinya yang halus dan dinamis.