Farih.co.id
Home Programming Cara Menggunakan Node RayCast2D untuk Deteksi Garis Pandang di Godot

Cara Menggunakan Node RayCast2D untuk Deteksi Garis Pandang di Godot

line of sight in godot

Deteksi garis pandang menambahkan lapisan kompleksitas pada game Anda dengan mekanisme yang memungkinkan karakter atau objek mengenali sekelilingnya. Anda dapat menggunakan fitur ini untuk perilaku AI musuh, mekanisme visibilitas pemain, gameplay siluman, dan banyak lagi.


VIDEO MUO HARI INI

GULIR UNTUK MELANJUTKAN ISI

Di Godot, node RayCast2D menawarkan cara sederhana dan efisien untuk mencapai deteksi garis pandang.


Menyiapkan Game Godot

Sebelum mendalami node RayCast2D, siapkan lingkungan game 2D dasar di Godot 4. Buat karakter pemain yang dapat bergerak menggunakan input keyboard dan berinteraksi dengan platform.

Pertama, buat adegan untuk karakter pemain. Tambah sebuah KarakterTubuh2D node sebagai akar adegan. Di dalam KarakterTubuh2Dtambah sebuah Bentuk Tabrakan2D dengan bentuk persegi panjang dan a Sprite2D untuk representasi visual karakter.

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

Berikut kode GDScript untuk pergerakan pemain:

 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)

Sekarang, buat beberapa platform untuk berinteraksi dengan pemain. Anda dapat gunakan Tubuh Statis2D node dengan bentuk tabrakan yang sesuai untuk mewakili platform. Atur mereka dalam adegan untuk menciptakan lingkungan platforming.

permainan sederhana dengan pemain di godot

Menyiapkan RayCast2D

Untuk membuat deteksi garis pandang, gunakan RayCast2D simpul. Inilah cara Anda dapat menambahkan a RayCast2D simpul menggunakan GDScript:

 var raycast: RayCast2D

func _ready():
    raycast = RayCast2D.new()
    add_child(raycast)

Pastikan untuk melampirkan skrip ini ke KarakterTubuh2D simpul. Cuplikan kode ini membuat yang baru RayCast2D node dan menempelkannya sebagai anak ke karakter pemain.

Memberikan Umpan Balik Visual tentang Interaksi Garis Pandang

Sekarang, Anda dapat mencetak pesan setiap kali garis pandang pemain bersinggungan dengan platform. Keluarkan sinar dari posisi pemain ke arah pergerakan. Jika sinar tersebut bertabrakan dengan suatu benda, berarti pemain mempunyai garis pandang ke suatu platform.

Tambahkan kode berikut ke skrip yang sama:

 func _physics_process(delta):
    

    raycast.target_position = Vector2(100, 0)

    if raycast.is_colliding():
        print("Collided with platform!")

Inilah hasilnya:

raycast sederhana di godot

Memperluas Fungsi RayCast2D

Ada banyak fitur canggih yang dapat Anda gunakan untuk meningkatkan interaktivitas dan kompleksitas game Anda secara signifikan.

dapatkan_collider()

Menggunakan dapatkan_collider() metode, Anda dapat mengakses objek pertama yang berpotongan dengan sinar. Metode ini mengembalikan null jika tidak ada objek di jalur sinar. Hal ini sangat berguna untuk mengidentifikasi objek tertentu yang dapat dilihat oleh pemain Anda.

 if raycast.is_colliding():
    var collided_object = raycast.get_collider()

    if collided_object:
        print("You can see:", collided_object.name)

dapatkan_collider_rid()

Itu dapatkan_collider_rid() metode ini dapat memberi tahu Anda Resource ID (RID) dari objek pertama yang berpotongan:

 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)

dapatkan_collider_shape()

Itu dapatkan_collider_shape() fungsi mengembalikan ID bentuk objek pertama yang berpotongan, atau 0 jika tidak terjadi tabrakan.

 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)

dapatkan_tabrakan_normal()

Untuk memahami interaksi dengan lebih baik, dapatkan_tabrakan_normal() memberi Anda bentuk normal pada titik tumbukan. Dalam kasus di mana sinar dimulai dalam bentuk dan tekan_dari_dalam benar, maka pengembaliannya akan normal Vektor2(0, 0).

 if raycast.is_colliding():
    var collision_normal = raycast.get_collision_normal()
    print("Collision Normal:", collision_normal)

dapatkan_titik_tabrakan()

Ketika sinar tersebut memotong suatu benda, dapatkan_titik_tabrakan() mengembalikan titik tumbukan yang tepat dalam koordinat global.

 if raycast.is_colliding():
    var collision_point = raycast.get_collision_point()
    print("Collision Point:", collision_point)

Menggunakan kemampuan canggih dari RayCast2D node, Anda bisa mendapatkan wawasan penting tentang interaksi antara sinar dan benda yang bertabrakan.

Metode ini memberdayakan Anda untuk mengumpulkan informasi penting yang dapat berdampak signifikan terhadap mekanisme gameplay, interaksi objek, dan masukan pemain.

Termasuk Fitur Tambahan

Selain fungsi deteksi garis pandang inti, Anda dapat lebih meningkatkan dinamika game Anda dengan menerapkan beberapa fitur lanjutan.

Pemicu Peristiwa

Daripada hanya mencetak pesan, Anda dapat memicu peristiwa tertentu dalam game. Misalnya, mengungkap jalur tersembunyi, mengaktifkan mekanisme, atau memperingatkan musuh akan kehadiran pemain dapat menambah kedalaman gameplay Anda.

Penanganan Obstruksi Dinamis

Pertimbangkan skenario di mana rintangan dapat menghalangi garis pandang. Menerapkan deteksi penghalang dinamis memastikan bahwa garis pandang diperbarui secara real-time saat objek bergerak masuk dan keluar dari pandangan pemain.

Indikator Visual Khusus

Daripada hanya mengandalkan teks, Anda dapat membuat indikator visual khusus untuk menyoroti keberadaan interaksi saling berhadapan. Hal ini dapat melibatkan perubahan warna sprite pemutar atau objek, menampilkan ikon, atau menganimasikan elemen yang relevan.

Mekanika Kabut Perang

Untuk game yang berfokus pada strategi atau eksplorasi, Anda dapat memperkenalkan mekanisme kabut perang. Hal ini membatasi pandangan pemain sampai mereka membentuk garis pandang, mengungkapkan dunia permainan secara bertahap dan mendorong pengambilan keputusan strategis.

Praktik Terbaik untuk Deteksi Garis Pandang

Mengoptimalkan deteksi garis pandang sangat penting untuk menjaga pengalaman bermain game yang lancar. Berikut adalah beberapa praktik terbaik yang perlu diingat.

Frekuensi Siaran Sinar

Hindari melakukan raycast setiap frame jika tidak diperlukan. Pertimbangkan untuk memeriksa garis pandang hanya ketika posisi pemain atau lingkungan berubah secara signifikan. Hal ini membantu mengurangi perhitungan yang tidak perlu.

Panjang Sinar

Seimbangkan panjang raycast Anda. Sinar yang terlalu panjang dapat memengaruhi kinerja, jadi pilihlah panjang yang mencakup area yang diperlukan sambil menjaga beban komputasi tetap terkendali.

Lapisan Tabrakan

Gunakan lapisan tabrakan dan masker untuk menyempurnakan objek mana yang dipertimbangkan oleh deteksi garis pandang. Hal ini mencegah raycast yang tidak perlu ke objek yang tidak relevan.

Hasil Caching

Jika Anda melakukan deteksi garis pandang yang sama untuk beberapa objek atau bingkai, pertimbangkan untuk menyimpan hasil dalam cache untuk menghindari perhitungan yang berlebihan.

Integrasi Tingkat Platformer

Sejajarkan mekanisme deteksi garis pandang Anda dengan desain level game platformer Anda. Pertimbangkan vertikalitas lingkungan, perbedaan ketinggian platform, dan potensi hambatan yang dapat menghalangi garis pandang.

Pastikan sistem deteksi Anda mengakomodasi nuansa ini untuk menciptakan pengalaman pemain yang lancar dan intuitif.

Membuat Game Godot Lebih Menarik Dengan Deteksi Garis Pandang

Deteksi garis pandang menambah kedalaman dan realisme pada dunia game Anda. Pemain dapat menyusun strategi, menyembunyikan, atau mendekati tantangan secara berbeda berdasarkan pandangan mereka. Mekanik ini dapat mengubah platformer sederhana menjadi pengalaman yang lebih mendalam, menjadikan gameplay lebih menarik dan berkesan.

Comment
Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

Ad