Naudokite šią techniką, kad pagerintumėte priešo judėjimą ir elgesį imituodami pagrindinį regėjimą.
Matymo linijos aptikimas suteikia žaidimui sudėtingumo mechanizmu, leidžiančiu veikėjams ar objektams suvokti juos supančią aplinką. Galite naudoti šią funkciją priešo AI elgesiui, žaidėjų matomumo mechanikai, slaptam žaidimui ir kt.
Godot „RayCast2D“ mazgas siūlo paprastą ir efektyvų būdą aptikti matymo liniją.
„Godot“ žaidimo nustatymas
Prieš pasinerdami į „RayCast2D“ mazgus, „Godot 4“ nustatykite pagrindinę 2D žaidimo aplinką. Sukurti grotuvą simbolis, kuris gali judėti naudojant klaviatūros įvestis ir bendrauti su platformomis.
Pirmiausia sukurkite sceną žaidėjo veikėjui. Pridėti CharacterBody2D mazgas kaip scenos šaknis. Viduje CharacterBody2D, Pridėti CollisionShape2D su stačiakampio formos ir a Sprite2D veikėjo vizualiniam atvaizdavimui.
Šiame straipsnyje naudojamas kodas pateikiamas čia GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.
Štai žaidėjo judėjimo GDScript kodas:
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)
Dabar sukurkite keletą platformų, su kuriomis žaidėjas galėtų bendrauti. Tu gali naudoti StaticBody2D mazgai su atitinkamomis susidūrimo formomis, atspindinčiomis platformas. Išdėstykite juos scenoje, kad sukurtumėte platforminę aplinką.
„RayCast2D“ nustatymas
Norėdami sukurti regėjimo linijos aptikimą, naudokite RayCast2D mazgas. Štai kaip galite pridėti a RayCast2D mazgas naudojant GDScript:
var raycast: RayCast2D
func _ready():
raycast = RayCast2D.new()
add_child(raycast)
Būtinai pridėkite šį scenarijų prie CharacterBody2D mazgas. Šis kodo fragmentas sukuria naują RayCast2D mazgas ir prideda jį kaip vaiką prie žaidėjo personažo.
Teikti vaizdinį grįžtamąjį ryšį apie tiesioginio matymo ryšį
Dabar galite atspausdinti pranešimą, kai žaidėjo matymo linija susikerta su platforma. Meskite spindulį iš žaidėjo padėties judėjimo kryptimi. Jei spindulys susiduria su objektu, tai reiškia, kad žaidėjas turi regėjimo liniją į platformą.
Prie to paties scenarijaus pridėkite šį kodą:
func _physics_process(delta):
#... (previous movement code)raycast.target_position = Vector2(100, 0)
if raycast.is_colliding():
print("Collided with platform!")
Štai išvestis:
RayCast2D funkcionalumo išplėtimas
Yra daug pažangių funkcijų, kurias galite naudoti norėdami žymiai padidinti žaidimo interaktyvumą ir sudėtingumą.
get_collider()
Naudojant get_collider() metodu, galite pasiekti pirmąjį objektą, kurį kerta spindulys. Metodas grąžina nulį, jei spindulio kelyje nėra objekto. Tai ypač naudinga nustatant konkretų objektą, į kurį žaidėjas gali matyti.
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() metodas gali pasakyti pirmojo susikertančio objekto ištekliaus ID (RID):
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 grąžina pirmojo susikirtusio objekto formos ID arba 0, jei neįvyksta susidūrimas.
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()
Norėdami geriau suprasti sąveiką, get_collision_normal() susidūrimo taške suteikia jums normalią formą. Tais atvejais, kai spindulys prasideda formos viduje ir hit_from_inside tiesa, normalus grįžimas bus Vector2(0, 0).
if raycast.is_colliding():
var collision_normal = raycast.get_collision_normal()
print("Collision Normal:", collision_normal)
get_collision_point()
Kai spindulys kerta objektą, get_collision_point() grąžina tikslų susidūrimo tašką pasaulinėse koordinatėse.
if raycast.is_colliding():
var collision_point = raycast.get_collision_point()
print("Collision Point:", collision_point)
Naudojant šias išplėstines galimybes RayCast2D mazgas, galite gauti svarbių įžvalgų apie spindulio ir susidūrusių objektų sąveiką.
Šie metodai įgalina rinkti esminę informaciją, kuri gali turėti didelės įtakos žaidimo mechanikai, objektų sąveikai ir žaidėjų atsiliepimams.
Įskaitant papildomas funkcijas
Be pagrindinės matymo linijos aptikimo funkcijos, galite dar labiau pagerinti žaidimo dinamiką įdiegę kai kurias išplėstines funkcijas.
Įvykių aktyvikliai
Užuot tik spausdinę pranešimą, galite suaktyvinti konkrečius žaidimo įvykius. Pavyzdžiui, paslėptų kelių atskleidimas, mechanizmų aktyvinimas arba priešų perspėjimas apie žaidėjo buvimą gali suteikti žaidimo gilumo.
Dinaminis kliūčių valdymas
Apsvarstykite scenarijus, kai kliūtys gali trukdyti matymui. Dinaminio kliūčių aptikimo įdiegimas užtikrina, kad regėjimo linija atnaujinama realiuoju laiku, kai objektai juda ir išeina iš žaidėjo.
Individualūs vaizdiniai indikatoriai
Užuot pasikliavę vien tekstu, galite sukurti pasirinktinius vaizdinius indikatorius, kad pabrėžtumėte tiesioginio matymo linijos sąveiką. Tai gali apimti grotuvo ar objekto spalvos pakeitimą, piktogramos rodymą arba animuoti atitinkamus elementus.
Karo mechanikos rūkas
Strateginiams ar tyrinėjimams skirtuose žaidimuose galite pristatyti karo mechanikos miglą. Tai riboja žaidėjo regėjimą, kol jie užmezga regėjimo liniją, palaipsniui atskleidžiant žaidimo pasaulį ir skatinant priimti strateginius sprendimus.
Geriausia regėjimo linijos aptikimo praktika
Matymo linijos aptikimo optimizavimas yra labai svarbus norint išlaikyti sklandų žaidimo patirtį. Štai keletas geriausių praktikų, kurių reikia nepamiršti.
Raycast dažnis
Jei tai nėra būtina, nedarykite raycast'ų kiekviename kadre. Apsvarstykite galimybę tikrinti regėjimo liniją tik tada, kai žaidėjo padėtis arba aplinka labai pasikeičia. Tai padeda sumažinti nereikalingų skaičiavimų skaičių.
Ray ilgis
Subalansuokite savo raycast ilgį. Itin ilgi spinduliai gali turėti įtakos našumui, todėl rinkitės ilgį, kuris apimtų reikiamą plotą, tuo pačiu išlaikant skaičiavimo apkrovą.
Susidūrimo sluoksniai
Naudokite susidūrimo sluoksnius ir kaukes, kad tiksliai sureguliuotumėte objektus, į kuriuos atsižvelgiama regėjimo linijos aptikimo sistemoje. Tai apsaugo nuo nereikalingų spindulių perdavimo į nereikšmingus objektus.
Talpyklos rezultatai
Jei atliekate tą pačią matymo liniją keliems objektams ar kadrams, apsvarstykite galimybę išsaugoti rezultatus talpykloje, kad išvengtumėte perteklinių skaičiavimų.
Platformos lygio integracija
Suderinkite savo matymo linijos aptikimo mechaniką su lygio dizainu jūsų platformingo žaidimas. Atsižvelkite į aplinkos vertikalumą, skirtingus platformų aukščius ir galimas kliūtis, kurios gali trukdyti matyti.
Įsitikinkite, kad jūsų aptikimo sistema atitinka šiuos niuansus, kad sukurtumėte vientisą ir intuityvią žaidėjo patirtį.
Padarykite „Godot“ žaidimus patrauklesnius su regėjimo linijos aptikimu
Matymo linijos aptikimas suteikia žaidimo pasauliui gylio ir tikroviškumo. Žaidėjai gali skirtingai strateguoti, slėpti ar spręsti iššūkius, atsižvelgdami į savo regėjimo liniją. Šis mechanikas gali paversti paprastą platformerį labiau įtraukiančia patirtimi, todėl žaidimas tampa patrauklesnis ir įsimintinesnis.