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:

instagram viewer
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)

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.