Použite túto techniku ​​na zlepšenie pohybu a správania nepriateľa napodobňovaním základného videnia.

Detekcia priamej viditeľnosti pridáva do vašej hry vrstvu zložitosti pomocou mechanizmu, ktorý umožňuje postavám alebo predmetom vnímať svoje okolie. Túto funkciu môžete použiť na správanie nepriateľskej AI, mechaniku viditeľnosti hráča, stealth hru a ďalšie.

V Godot ponúka uzol RayCast2D jednoduchý a efektívny spôsob, ako dosiahnuť detekciu priamej viditeľnosti.

Nastavenie hry Godot

Pred ponorením sa do uzlov RayCast2D nastavte základné 2D herné prostredie v Godot 4. Vytvorte hráča znak, ktorý sa môže pohybovať pomocou vstupov z klávesnice a interagovať s platformami.

Najprv vytvorte scénu pre postavu hráča. Pridaj CharacterBody2D uzol ako koreň scény. Vnútri CharacterBody2D, pridaj CollisionShape2D s tvarom obdĺžnika a a Sprite2D pre vizuálnu reprezentáciu postavy.

Kód použitý v tomto článku je dostupný v tomto úložisko GitHub a môžete ho bezplatne používať na základe licencie MIT.

Tu je kód GDScript pre pohyb hráča:

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)

Teraz vytvorte nejaké platformy, s ktorými bude hráč komunikovať. Môžeš použiť StaticBody2D uzly s vhodnými zrážkami, ktoré reprezentujú platformy. Usporiadajte ich v scéne a vytvorte platformové prostredie.

Nastavenie RayCast2D

Na vytvorenie detekcie priamej viditeľnosti použite RayCast2D uzol. Tu je návod, ako môžete pridať a RayCast2D uzol používajúci GDScript:

var raycast: RayCast2D

func _ready():
raycast = RayCast2D.new()
add_child(raycast)

Nezabudnite pripojiť tento skript k súboru CharacterBody2D uzol. Tento útržok kódu vytvorí nový RayCast2D uzol a pripojí ho ako dieťa k postave hráča.

Poskytovanie vizuálnej spätnej väzby pri interakcii z priamej viditeľnosti

Teraz si môžete vytlačiť správu vždy, keď sa línia pohľadu hráča pretína s platformou. Vrhajte lúč z pozície hráča v smere pohybu. Ak sa lúč zrazí s objektom, znamená to, že hráč má priamy výhľad na plošinu.

Pridajte nasledujúci kód do rovnakého skriptu:

func _physics_process(delta):
#... (previous movement code)

raycast.target_position = Vector2(100, 0)

if raycast.is_colliding():
print("Collided with platform!")

Tu je výstup:

Rozšírenie funkčnosti RayCast2D

Existuje mnoho pokročilých funkcií, ktoré môžete použiť na výrazné zlepšenie interaktivity a zložitosti vašej hry.

get_collider()

Pomocou get_collider() metódou, môžete pristupovať k prvému objektu pretínanému lúčom. Metóda vráti hodnotu null, ak v dráhe lúča nie je žiadny objekt. To je obzvlášť užitočné pri identifikácii konkrétneho objektu, na ktorý má váš hráč zorný bod.

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() metóda vám môže povedať Resource ID (RID) prvého pretínajúceho sa objektu:

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() funkcia vráti ID tvaru prvého pretínaného objektu alebo 0, ak nedôjde ku kolízii.

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()

Aby ste lepšie porozumeli interakcii, get_collision_normal() vám poskytne normálu tvaru v bode kolízie. V prípadoch, keď lúč začína v rámci tvaru a hit_from_inside je pravda, normálna návratnosť bude Vektor2(0; 0).

if raycast.is_colliding():
var collision_normal = raycast.get_collision_normal()
print("Collision Normal:", collision_normal)

get_collision_point()

Keď lúč pretína objekt, get_collision_point() vráti presný bod kolízie v globálnych súradniciach.

if raycast.is_colliding():
var collision_point = raycast.get_collision_point()
print("Collision Point:", collision_point)

Pomocou týchto pokročilých schopností RayCast2D uzla, môžete získať kritický prehľad o interakciách medzi lúčom a kolidujúcim objektom.

Tieto metódy vám umožňujú zhromažďovať základné informácie, ktoré môžu výrazne ovplyvniť herné mechanizmy, interakcie s predmetmi a spätnú väzbu od hráčov.

Vrátane ďalších funkcií

Okrem základnej funkcie detekcie priamej viditeľnosti môžete ešte viac vylepšiť dynamiku svojej hry implementáciou niektorých pokročilých funkcií.

Spúšťače udalostí

Namiesto jednoduchého vytlačenia správy môžete spustiť konkrétne udalosti v hre. Napríklad odhalenie skrytých ciest, aktivácia mechanizmov alebo upozorňovanie nepriateľov na prítomnosť hráča môže pridať hĺbku vašej hre.

Dynamická manipulácia s prekážkami

Zvážte scenáre, kde prekážky môžu brániť v zornom poli. Implementácia dynamickej detekcie prekážok zaisťuje, že zorná línia sa aktualizuje v reálnom čase, keď sa objekty pohybujú do a mimo pohľadu hráča.

Vlastné vizuálne indikátory

Namiesto toho, aby ste sa spoliehali iba na text, môžete vytvoriť vlastné vizuálne indikátory na zvýraznenie prítomnosti interakcií priamou viditeľnosťou. Môže ísť o zmenu farby prehrávača alebo objektového spritu, zobrazenie ikony, príp animácia relevantných prvkov.

Mechanika hmly vojny

Pre strategické hry alebo hry zamerané na prieskum môžete zaviesť mechaniku hmly. To obmedzuje hráčovu víziu, kým si nevytvorí zorný bod, čím sa herný svet postupne odkryje a podporí strategické rozhodovanie.

Osvedčené postupy pre detekciu priamej viditeľnosti

Optimalizácia detekcie priamej viditeľnosti je rozhodujúca pre udržanie plynulého herného zážitku. Tu je niekoľko osvedčených postupov, ktoré treba mať na pamäti.

Raycast frekvencia

Vyhnite sa vykonávaniu raycastov každý snímok, ak to nie je potrebné. Zvážte kontrolu priamej viditeľnosti iba vtedy, keď sa pozícia hráča alebo prostredie výrazne zmení. Pomáha to znížiť zbytočné výpočty.

Dĺžka lúča

Vyvážte dĺžku vášho raycastu. Extrémne dlhé lúče môžu ovplyvniť výkon, preto zvoľte dĺžku, ktorá pokryje potrebnú plochu a zároveň udržíte pod kontrolou výpočtovú záťaž.

Kolízne vrstvy

Pomocou kolíznych vrstiev a masiek jemne dolaďte, ktoré objekty zohľadňuje detekcia priamej viditeľnosti. Tým sa zabráni zbytočným lúčom na irelevantné objekty.

Výsledky ukladania do vyrovnávacej pamäte

Ak vykonávate rovnakú detekciu viditeľnosti pre niekoľko objektov alebo snímok, zvážte uloženie výsledkov do vyrovnávacej pamäte, aby ste sa vyhli nadbytočným výpočtom.

Integrácia na úrovni platformy

Zosúlaďte svoju mechaniku detekcie priamej viditeľnosti s dizajnom úrovní vaša plošinovka. Zvážte vertikalitu prostredia, rôzne výšky nástupíšť a potenciálne prekážky, ktoré by mohli prekážať v zornom poli.

Uistite sa, že váš detekčný systém sa prispôsobí týmto nuansám a vytvorí tak bezproblémový a intuitívny hráčsky zážitok.

Vďaka detekcii priamej viditeľnosti sú hry Godot pútavejšie

Detekcia priamej viditeľnosti dodáva vášmu hernému svetu hĺbku a realizmus. Hráči môžu stratégovať, skrývať alebo pristupovať k výzvam odlišne v závislosti od ich zorného uhla. Táto mechanika dokáže premeniť jednoduchú plošinovku na viac pohlcujúci zážitok, vďaka čomu je hra pútavejšia a nezabudnuteľnejšia.