Használja ezt a technikát az ellenség mozgásának és viselkedésének fokozására az alapvető látás utánzásával.

A látótávolság-érzékelés bonyolultabbá teszi a játékot egy olyan mechanizmussal, amely lehetővé teszi a karakterek vagy tárgyak észlelését a környezetükben. Ezt a funkciót használhatod az ellenséges mesterséges intelligencia viselkedésére, a játékosok láthatósági mechanikájára, a lopakodó játékmenetre és még sok másra.

A Godot-ban a RayCast2D csomópont egyszerű és hatékony módot kínál a rálátás észlelésére.

A Godot játék beállítása

Mielőtt belemerülne a RayCast2D csomópontjaiba, állítson be egy alapvető 2D-s játékkörnyezetet a Godot 4-ben. Hozz létre egy játékost karakter, amely a billentyűzet segítségével mozoghat és interakcióba lépnek a platformokkal.

Először hozzon létre egy jelenetet a játékos karakterének. Add hozzá a CharacterBody2D csomópont, mint a jelenet gyökere. Benne CharacterBody2D, add hozzá a CollisionShape2D téglalap alakú és a Sprite2D a karakter vizuális megjelenítéséhez.

A cikkben használt kód itt érhető el GitHub adattár és az MIT licence alapján ingyenesen használható.

Íme a játékos mozgásának GDScript kódja:

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)

Most hozzon létre néhány platformot a játékos számára, amellyel kapcsolatba léphet. Te tudod használni StaticBody2D csomópontok megfelelő ütközési alakzatokkal a platformok ábrázolásához. Rendezd őket a jelenetbe, hogy platformos környezetet hozz létre.

A RayCast2D beállítása

Rálátás-érzékelés létrehozásához használja a RayCast2D csomópont. Így adhat hozzá a RayCast2D csomópont GDScript használatával:

var raycast: RayCast2D

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

Ügyeljen arra, hogy csatolja ezt a szkriptet a CharacterBody2D csomópont. Ez a kódrészlet újat hoz létre RayCast2D csomópontot, és gyerekként a játékos karakteréhez csatolja.

Vizuális visszacsatolás a látóvonali interakcióról

Mostantól bármikor kinyomtathat egy üzenetet, amikor a játékos látószöge metszi a platformot. Vezess egy sugarat a játékos helyzetéből a mozgás irányába. Ha a sugár ütközik egy tárggyal, az azt jelenti, hogy a játékos rálátása van egy platformra.

Adja hozzá a következő kódot ugyanahhoz a szkripthez:

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

raycast.target_position = Vector2(100, 0)

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

Íme a kimenet:

A RayCast2D funkcionalitásának bővítése

Számos fejlett funkcióval jelentősen növelheti játéka interaktivitását és összetettségét.

get_collider()

Használni a get_collider() módszerrel elérheti az első objektumot, amelyet a sugár metsz. A metódus null értéket ad vissza, ha nincs objektum a sugár útján. Ez különösen hasznos annak a konkrét tárgynak az azonosításához, amelyre a játékos rálátása van.

if raycast.is_colliding():
var collided_object = raycast.get_collider()

if collided_object:
print("You can see:", collided_object.name)

get_collider_rid()

A get_collider_rid() metódus meg tudja mondani az első metszett objektum erőforrásazonosítóját (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()

A get_collider_shape() A függvény visszaadja az első metszett objektum alakazonosítóját, vagy 0-t, ha nem történik ütközés.

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

Az interakció jobb megértése érdekében get_collision_normal() az ütközési pontnál az alakzat normálisát adja meg. Azokban az esetekben, amikor a sugár az alakzaton belül kezdődik és hit_from_inside igaz, a normál visszaadott lesz vektor2(0, 0).

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

get_collision_point()

Amikor a sugár metszi egy tárgyat, get_collision_point() visszaadja a pontos ütközési pontot globális koordinátákban.

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

Használja ezeket a fejlett képességeket a RayCast2D csomópont, kritikus betekintést nyerhet a sugár és az ütköző objektumok közötti kölcsönhatásba.

Ezek a módszerek lehetővé teszik, hogy olyan alapvető információkat gyűjtsön össze, amelyek jelentősen befolyásolhatják a játék mechanikáját, az objektumok interakcióit és a játékosok visszajelzéseit.

Kiegészítő funkciókkal együtt

Az alapvető látótávolság-érzékelés mellett néhány speciális funkció megvalósításával tovább javíthatja játékának dinamikáját.

Eseményindítók

Ahelyett, hogy pusztán kinyomtatna egy üzenetet, bizonyos játékon belüli eseményeket indíthat el. Például a rejtett utak felfedése, a mechanizmusok aktiválása vagy az ellenségek figyelmeztetése a játékos jelenlétére mélyebbé teheti a játékmenetet.

Dinamikus akadálykezelés

Fontolja meg azokat a forgatókönyveket, amikor akadályok akadályozhatják a rálátást. A dinamikus akadályérzékelés megvalósítása biztosítja, hogy a látómező valós időben frissüljön, ahogy az objektumok be- és kimozdulnak a játékos látószögébe.

Egyedi vizuális indikátorok

Ahelyett, hogy kizárólag a szövegre hagyatkozna, egyéni vizuális indikátorokat hozhat létre, amelyek kiemelik a rálátási interakciók jelenlétét. Ez magában foglalhatja a lejátszó vagy az objektum sprite színének megváltoztatását, egy ikon megjelenítését vagy releváns elemek animálása.

A hadimechanika köde

A stratégiai vagy felfedezésre összpontosító játékokhoz bevezetheti a háborús mechanika ködét. Ez addig korlátozza a játékos látásmódját, amíg létre nem hoz egy látótávolságot, fokozatosan felfedi a játék világát, és ösztönzi a stratégiai döntéshozatalt.

A látóvonal-érzékelés legjobb gyakorlatai

A látóvonal-érzékelés optimalizálása elengedhetetlen a zökkenőmentes játékélmény fenntartásához. Íme néhány bevált gyakorlat, amit érdemes szem előtt tartani.

Raycast frekvencia

Kerülje el a raycastok végrehajtását minden képkockában, ha nem szükséges. Fontolja meg a rálátás ellenőrzését, ha a játékos pozíciója vagy a környezet jelentősen megváltozik. Ez segít csökkenteni a szükségtelen számításokat.

Ray Length

Egyensúlyozza a raycast hosszát. Az extrém hosszú sugarak befolyásolhatják a teljesítményt, ezért válasszon olyan hosszúságot, amely lefedi a szükséges területet, miközben kordában tartja a számítási terhelést.

Ütköző rétegek

Használjon ütközési rétegeket és maszkokat a látóvonal-érzékelés által figyelembe vett objektumok finomhangolásához. Ez megakadályozza a szükségtelen sugárzást az irreleváns objektumokra.

Gyorsítótárazási eredmények

Ha ugyanazt a látóvonal-érzékelést több objektumhoz vagy kerethez hajtja végre, fontolja meg az eredmények gyorsítótárazását a redundáns számítások elkerülése érdekében.

Platformer szintű integráció

Igazítsa a látóvonal-érzékelési mechanikát a szinttervhez a platformer játékod. Vegye figyelembe a környezet függőleges helyzetét, a különböző platformmagasságokat és a lehetséges akadályokat, amelyek akadályozhatják a rálátást.

Győződjön meg arról, hogy észlelőrendszere alkalmazkodik ezekhez az árnyalatokhoz, hogy zökkenőmentes és intuitív játékélményt teremtsen.

A Godot-játékok vonzóbbá tétele a látóvonal-érzékeléssel

A rálátás-érzékelés mélységet és valósághűséget ad játékvilágának. A játékosok a látási szögüktől függően eltérően alakíthatják ki, rejthetik el vagy közelíthetik meg a kihívásokat. Ez a szerelő egy egyszerű platformozót még magával ragadó élménnyé varázsolhat, így a játékmenet még vonzóbbá és emlékezetesebbé válik.