Uporabite to tehniko za izboljšanje gibanja in obnašanja sovražnika s posnemanjem osnovnega vida.
Zaznavanje vidnega polja doda plast kompleksnosti vaši igri z mehanizmom, ki likom ali predmetom omogoča zaznavanje okolice. To funkcijo lahko uporabite za vedenje umetne inteligence sovražnika, mehanike vidnosti igralcev, prikrito igranje in drugo.
V Godotu ponuja vozlišče RayCast2D preprost in učinkovit način za doseganje zaznavanja vidnega polja.
Nastavitev igre Godot
Preden se potopite v vozlišča RayCast2D, nastavite osnovno okolje 2D igre v Godotu 4. Ustvari igralca znak, ki se lahko premika s pomočjo vnosov s tipkovnice in interakcijo s platformami.
Najprej ustvarite sceno za lik igralca. Dodaj a CharacterBody2D vozlišče kot koren scene. Znotraj CharacterBody2D, dodajte a CollisionShape2D s pravokotno obliko in a Sprite2D za vizualno predstavitev lika.
Koda, uporabljena v tem članku, je na voljo tukaj Repozitorij GitHub in je brezplačen za uporabo pod licenco MIT.
Tukaj je koda GDScript za gibanje igralca:
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)
Sedaj ustvarite nekaj platform za interakcijo igralca. Lahko uporabiš Statično telo2D vozlišča z ustreznimi oblikami trkov, ki predstavljajo platforme. Razporedite jih v sceno, da ustvarite platformsko okolje.
Nastavitev RayCast2D
Če želite ustvariti zaznavanje vidnega polja, uporabite RayCast2D vozlišče. Tukaj je opisano, kako lahko dodate a RayCast2D vozlišče z uporabo GDScript:
var raycast: RayCast2D
func _ready():
raycast = RayCast2D.new()
add_child(raycast)
Ne pozabite priložiti tega skripta v CharacterBody2D vozlišče. Ta delček kode ustvari nov RayCast2D vozlišče in ga kot otroka pripne liku igralca.
Zagotavljanje vizualnih povratnih informacij o interakciji v vidnem polju
Zdaj lahko natisnete sporočilo, kadar koli se igralčeva vidna linija seka s platformo. Oddajte žarek z igralčevega položaja v smeri gibanja. Če žarek trči v predmet, to pomeni, da ima igralec vidno polje na platformo.
Istemu skriptu dodajte naslednjo kodo:
func _physics_process(delta):
#... (previous movement code)raycast.target_position = Vector2(100, 0)
if raycast.is_colliding():
print("Collided with platform!")
Tukaj je rezultat:
Razširitev funkcionalnosti RayCast2D
Obstaja veliko naprednih funkcij, ki jih lahko uporabite za bistveno izboljšanje interaktivnosti in kompleksnosti vaše igre.
get_collider()
Uporabljati get_collider() lahko dostopate do prvega predmeta, ki ga seka žarek. Metoda vrne ničelno vrednost, če na poti žarka ni nobenega predmeta. To je še posebej koristno za identifikacijo določenega predmeta, ki ga ima vaš igralec vidno polje.
if raycast.is_colliding():
var collided_object = raycast.get_collider()
if collided_object:
print("You can see:", collided_object.name)
get_collider_rid()
The get_collider_rid() metoda vam lahko pove ID vira (RID) prvega presekanega predmeta:
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()
The get_collider_shape() funkcija vrne ID oblike prvega presekanega predmeta ali 0, če ne pride do kolizije.
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()
Da bi bolje razumeli interakcijo, get_collision_normal() vam priskrbi normalo oblike na točki trka. V primerih, ko se žarek začne znotraj oblike in udarec_od_znotraj je res, normalno vrnjeno bo Vektor2(0, 0).
if raycast.is_colliding():
var collision_normal = raycast.get_collision_normal()
print("Collision Normal:", collision_normal)
get_collision_point()
Ko žarek seka predmet, get_collision_point() vrne točno točko trka v globalnih koordinatah.
if raycast.is_colliding():
var collision_point = raycast.get_collision_point()
print("Collision Point:", collision_point)
Z uporabo teh naprednih zmogljivosti RayCast2D vozlišča, lahko pridobite kritičen vpogled v interakcije med žarkom in trčečimi predmeti.
Te metode vam omogočajo zbiranje bistvenih informacij, ki lahko pomembno vplivajo na mehaniko igranja, interakcije predmetov in povratne informacije igralcev.
Vključno z dodatnimi funkcijami
Poleg osnovne funkcije zaznavanja vidnega polja lahko še izboljšate dinamiko svoje igre z implementacijo nekaterih naprednih funkcij.
Sprožilci dogodkov
Namesto zgolj tiskanja sporočila lahko sprožite določene dogodke v igri. Na primer, razkrivanje skritih poti, aktiviranje mehanizmov ali opozarjanje sovražnikov na prisotnost igralca lahko vašemu igranju doda globino.
Dinamično ravnanje z ovirami
Razmislite o scenarijih, kjer lahko ovire ovirajo vidno črto. Implementacija dinamičnega zaznavanja ovir zagotavlja, da se vidna linija posodablja v realnem času, ko se predmeti premikajo v in iz igralčevega pogleda.
Vizualni indikatorji po meri
Namesto da se zanašate zgolj na besedilo, lahko ustvarite vizualne indikatorje po meri, da poudarite prisotnost interakcij v vidnem polju. To lahko vključuje spreminjanje barve igralca ali sprite predmeta, prikaz ikone ali animiranje ustreznih elementov.
Megla vojne mehanike
Za strateške igre ali igre, osredotočene na raziskovanje, lahko uvedete mehaniko megle vojne. To omejuje igralčev vid, dokler ne vzpostavi vidne črte, postopoma razkriva svet igre in spodbuja strateško odločanje.
Najboljše prakse za zaznavanje vidnega polja
Optimiziranje zaznavanja vidnega polja je ključnega pomena za ohranjanje nemotene izkušnje igranja. Tukaj je nekaj najboljših praks, ki jih morate upoštevati.
Frekvenca Raycast
Izogibajte se izvajanju žarkov za vsak okvir, če to ni potrebno. Razmislite o preverjanju vidnega polja le, ko se položaj igralca ali okolje bistveno spremeni. To pomaga zmanjšati nepotrebne izračune.
Dolžina žarka
Uravnotežite dolžino vašega raycasta. Izjemno dolgi žarki lahko vplivajo na zmogljivost, zato izberite dolžino, ki pokriva potrebno območje, hkrati pa ohranja računalniško obremenitev pod nadzorom.
Plasti trčenja
Uporabite plasti trkov in maske za natančno nastavitev, katere predmete upošteva zaznavanje vidnega polja. To preprečuje nepotrebne žarke na nepomembne objekte.
Predpomnjenje rezultatov
Če izvajate isto zaznavanje vidnega polja za več predmetov ali okvirjev, razmislite o predpomnjenju rezultatov, da se izognete odvečnim izračunom.
Integracija na ravni platforme
Uskladite svojo mehaniko zaznavanja vidnega polja z zasnovo ravni vaša platformska igra. Upoštevajte navpičnost okolja, različne višine ploščadi in morebitne ovire, ki bi lahko ovirale vidno polje.
Prepričajte se, da vaš sistem zaznavanja upošteva te nianse, da ustvarite brezhibno in intuitivno igralsko izkušnjo.
Naredite igre Godot bolj privlačne z zaznavanjem črte vida
Zaznavanje vidnega polja doda globino in realističnost v vaš svet igre. Igralci lahko oblikujejo strategijo, se skrijejo ali se izzivov lotijo drugače glede na svoj vidni okvir. Ta mehanika lahko preprosto platformsko igro spremeni v bolj poglobljeno izkušnjo, zaradi česar je igranje bolj privlačno in nepozabno.