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:

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)

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.