Izmantojiet šo paņēmienu, lai uzlabotu ienaidnieka kustību un uzvedību, atdarinot pamata redzi.
Redzes līnijas noteikšana padara jūsu spēli sarežģītāku, izmantojot mehānismu, kas ļauj varoņiem vai objektiem uztvert savu apkārtni. Varat izmantot šo funkciju ienaidnieka AI uzvedībai, spēlētāja redzamības mehānikai, slepenai spēlei un citiem.
Godotā RayCast2D mezgls piedāvā vienkāršu un efektīvu veidu, kā panākt redzes līnijas noteikšanu.
Godota spēles iestatīšana
Pirms ienirt RayCast2D mezglos, iestatiet pamata 2D spēles vidi Godot 4. Izveidojiet atskaņotāju rakstzīme, kas var pārvietoties, izmantojot tastatūras ievades un mijiedarboties ar platformām.
Vispirms izveidojiet ainu spēlētāja tēlam. Pievienojiet a CharacterBody2D mezgls kā ainas sakne. Iekšpusē CharacterBody2D, pievienojiet a CollisionShape2D ar taisnstūra formu un a Sprite2D tēla vizuālajam attēlojumam.
Šajā rakstā izmantotais kods ir pieejams šajā GitHub repozitorijs un to varat izmantot bez maksas saskaņā ar MIT licenci.
Šeit ir GDScript kods spēlētāja kustībai:
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)
Tagad izveidojiet dažas platformas, ar kurām atskaņotājs var mijiedarboties. Tu vari izmantot StaticBody2D mezgli ar atbilstošām sadursmes formām, lai attēlotu platformas. Sakārtojiet tos ainā, lai izveidotu platformas vidi.
RayCast2D iestatīšana
Lai izveidotu redzes līnijas noteikšanu, izmantojiet RayCast2D mezgls. Lūk, kā varat pievienot a RayCast2D mezgls, izmantojot GDScript:
var raycast: RayCast2D
func _ready():
raycast = RayCast2D.new()
add_child(raycast)
Noteikti pievienojiet šo skriptu CharacterBody2D mezgls. Šis koda fragments izveido jaunu RayCast2D mezglu un pievieno to kā bērnu spēlētāja tēlam.
Vizuālas atsauksmes sniegšana par mijiedarbību redzamības zonā
Tagad varat izdrukāt ziņojumu ikreiz, kad spēlētāja redzes līnija krustojas ar platformu. Metiet staru no spēlētāja pozīcijas kustības virzienā. Ja stars saduras ar objektu, tas nozīmē, ka spēlētājam ir redzamības līnija uz platformu.
Pievienojiet tam pašam skriptam šādu kodu:
func _physics_process(delta):
#... (previous movement code)raycast.target_position = Vector2(100, 0)
if raycast.is_colliding():
print("Collided with platform!")
Šeit ir izvade:
RayCast2D funkcionalitātes paplašināšana
Ir daudzas uzlabotas funkcijas, kuras varat izmantot, lai ievērojami uzlabotu spēles interaktivitāti un sarežģītību.
get_collider()
Izmantojot get_collider() metodi, varat piekļūt pirmajam objektam, ko šķērso stars. Metode atgriež nulli, ja neviens objekts neatrodas stara ceļā. Tas ir īpaši noderīgi, lai identificētu konkrēto objektu, uz kuru jūsu atskaņotājs ir redzams.
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() metode var pateikt pirmā krustotā objekta resursa 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 atgriež pirmā krustotā objekta formas ID vai 0, ja nenotiek sadursme.
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()
Lai labāk izprastu mijiedarbību, get_collision_normal() sadursmes punktā sniedz jums formas normālu. Gadījumos, kad stars sākas formas ietvaros un hit_from_inside ir taisnība, normāli atgriezās būs Vector2(0, 0).
if raycast.is_colliding():
var collision_normal = raycast.get_collision_normal()
print("Collision Normal:", collision_normal)
get_collision_point()
Kad stars šķērso objektu, get_collision_point() atgriež precīzu sadursmes punktu globālajās koordinātēs.
if raycast.is_colliding():
var collision_point = raycast.get_collision_point()
print("Collision Point:", collision_point)
Izmantojot šīs uzlabotās iespējas RayCast2D mezglā, varat gūt kritisku ieskatu mijiedarbībā starp staru un saduras objektiem.
Šīs metodes ļauj apkopot būtisku informāciju, kas var būtiski ietekmēt spēles mehāniku, objektu mijiedarbību un spēlētāju atsauksmes.
Ieskaitot papildu funkcijas
Papildus galvenajai redzes līnijas noteikšanas funkcionalitātei varat vēl vairāk uzlabot savas spēles dinamiku, ieviešot dažas uzlabotas funkcijas.
Notikumu aktivizētāji
Tā vietā, lai vienkārši izdrukātu ziņojumu, varat aktivizēt konkrētus spēles notikumus. Piemēram, slēpto ceļu atklāšana, mehānismu aktivizēšana vai ienaidnieku brīdināšana par spēlētāja klātbūtni var padarīt jūsu spēli dziļāku.
Dinamiskā šķēršļu apstrāde
Apsveriet scenārijus, kuros šķēršļi var traucēt redzamības līniju. Dinamiskās šķēršļu noteikšanas ieviešana nodrošina, ka redzes līnija tiek atjaunināta reāllaikā, objektiem pārvietojoties spēlētāja skatā un ārpus tā.
Pielāgoti vizuālie indikatori
Tā vietā, lai paļautos tikai uz tekstu, varat izveidot pielāgotus vizuālos indikatorus, lai izceltu redzamības līnijas mijiedarbību. Tas var ietvert atskaņotāja vai objekta sprite krāsas maiņu, ikonas parādīšanu vai animējot attiecīgos elementus.
Kara mehānikas migla
Uz stratēģiju vai izpēti vērstām spēlēm varat ieviest kara mehānikas miglu. Tas ierobežo spēlētāja redzi, līdz viņi izveido redzes līniju, pakāpeniski atklājot spēles pasauli un mudinot pieņemt stratēģiskus lēmumus.
Paraugprakse redzes līnijas noteikšanai
Redzes līnijas noteikšanas optimizēšana ir ļoti svarīga, lai saglabātu vienmērīgu spēles pieredzi. Šeit ir dažas paraugprakses, kas jāpatur prātā.
Raycast frekvence
Izvairieties no raidīšanas katrā kadrā, ja tas nav nepieciešams. Apsveriet iespēju pārbaudīt redzamības līniju tikai tad, ja spēlētāja pozīcija vai vide būtiski mainās. Tas palīdz samazināt nevajadzīgus aprēķinus.
Raja garums
Līdzsvarojiet raidraidīšanas garumu. Īpaši gari stari var ietekmēt veiktspēju, tāpēc izvēlieties garumu, kas aptver nepieciešamo laukumu, vienlaikus kontrolējot skaitļošanas slodzi.
Sadursmes slāņi
Izmantojiet sadursmes slāņus un maskas, lai precīzi noregulētu, kurus objektus ņem vērā redzes līnijas noteikšana. Tas novērš nevajadzīgu staru pārraidi uz neatbilstošiem objektiem.
Kešatmiņas rezultāti
Ja veicat vienu un to pašu redzes līniju vairākiem objektiem vai kadriem, apsveriet iespēju saglabāt rezultātus kešatmiņā, lai izvairītos no liekiem aprēķiniem.
Platformera līmeņa integrācija
Saskaņojiet savu redzes līnijas noteikšanas mehāniku ar līmeņa dizainu jūsu platformera spēle. Apsveriet vides vertikāli, dažādus platformu augstumus un iespējamos šķēršļus, kas varētu traucēt redzamības līniju.
Nodrošiniet, lai jūsu noteikšanas sistēma atbilstu šīm niansēm, lai radītu vienmērīgu un intuitīvu spēlētāja pieredzi.
Padariet Godot spēles saistošākas ar redzes līnijas noteikšanu
Redzes līnijas noteikšana piešķir jūsu spēļu pasaulei dziļumu un reālismu. Spēlētāji var atšķirīgi stratēģizēt, slēpt vai pieiet izaicinājumiem atkarībā no viņu redzes līnijas. Šis mehāniķis var pārvērst vienkāršu platformas spēli par aizraujošāku pieredzi, padarot spēli saistošāku un neaizmirstamāku.