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