Az ütközésérzékelés hatással van a játékod legtöbb részére, kezdve attól, hogy a játékos hogyan áll az emelvényen, egészen addig, amíg elpusztítják az ellenséget.

Az ütközésészlelés a játékfejlesztés egyik kritikus szempontja, amely jelentősen befolyásolja a játékosok élményét. A pontos ütközésészlelés biztosítja, hogy a játék karakterei zökkenőmentesen interakcióba lépjenek környezetükkel, ezáltal az elmerülés és a valóság érzetét keltve.

A Godot, egy népszerű nyílt forráskódú játékmotor, hatékony eszközöket kínál a hatékony ütközésészlelés megvalósításához, ami gördülékeny és megnyerő játékmenetet eredményez.

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

Mielőtt elkezdené, hozzon létre egy egyszerű 2D platformer játékot a Godot 4-ben. Kezdje azzal, hogy beállítja a játék színterét egy játékos karakterrel és platformokkal.

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

Hozzon létre egy új jelenetet, és adjon hozzá a CharacterBody2D csomópont gyökércsomópontként. Add hozzá a

instagram viewer
Sprite2D csomópont gyermekeként a CharacterBody2D hogy vizuálisan ábrázolja a játékos karakterét.

Következő, mozgást ad a játékoshoz karakter GDScript használatával:

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)

Végül adjon platformokat a jelenethez a segítségével StaticBody2D csomópontokat az alapbeállítás befejezéséhez.

Különböző ütközési formák

A Godot számos ütközési formát kínál, amelyek különféle típusú játéktárgyakat szolgálnak ki. Ezek az ütközési alakzatok segítenek pontosan meghatározni azt a területet, amelyen belül az ütközésészlelés történik.

Mielőtt belemerülne a különböző ütközési alakzatokba, fontos megjegyezni, hogy közvetlenül a játékos karakteréhez csatolhat egyet, hogy meghatározza annak ütközési területét. Ez lehetővé teszi a pontos régió szabályozását az ütközés észleléséhez.

Kör ütközési forma

A kör alakú ütközés különösen hasznos olyan karakterek számára, akiknek sugárirányban kell kölcsönhatásba lépniük a környezettel. Ezt az alakzatot kör- vagy gömb alakú találati mezővel rendelkező karakterekhez használhatja. Kör ütközési alakzat hozzáadásához játékos karakteréhez:

# Inside the player character's script
var collision_shape = CollisionShape2D.new()
var circle_shape = CircleShape2D.new()
circle_shape.radius = 32
collision_shape.shape = circle_shape
add_child(collision_shape)

Téglalap ütközési forma

A téglalap alakú ütközési formák inkább dobozos vagy téglalap alakú karakterek számára alkalmasak. A következőképpen adhat hozzá téglalap ütközési alakzatot:

# Inside the player character's script
var collision_shape = CollisionShape2D.new()
var rect_shape = RectangleShape2D.new()
rect_shape.extents = Vector2(32, 64)
collision_shape.shape = rect_shape
add_child(collision_shape)

Konvex sokszög ütközési forma

A konvex sokszög ütközési formák nagy rugalmasságot biztosítanak a szabálytalan vagy nem téglalap alakú karakterek számára. Ezzel az alakzattal szorosan illeszkedhet karaktered körvonalaihoz. Konvex sokszög ütközési alakzat hozzáadása:

# Inside the player character's script
var collision_shape = CollisionShape2D.new()
var polygon_shape = ConvexPolygonShape2D.new()
polygon_shape.set_points([Vector2(-32, -64), Vector2(32, -64), Vector2(0, 64)])
collision_shape.shape = polygon_shape
add_child(collision_shape)

A megfelelő ütközési alakzat kiválasztásával és a játékos karakterhez való rögzítésével pontosan tudod észleli az ütközéseket a kijelölt területen belül, javítva a játékkal való interakciók pontosságát világ.

Ütközések észlelése

Az objektumok közötti ütközések észlelése elengedhetetlen az interakciók és a játékmechanizmus megvalósításához. A Godot-ban ezt a beépített fizikai motor segítségével érheti el.

# Detecting Collisions in _physics_process
func _physics_process(delta):
var input_dir = Vector2.ZERO
#... (input handling)

velocity = input_dir.normalized() * speed
var collision = move_and_collide(velocity * delta)

if collision:
print("collided")

Alább látható a kimenet:

Ütközésjelzők és ütközési maszkok

A Godot ütközési jeleket és ütközési maszkokat kínál hatékony eszközökként, amelyek kifinomultabbá teszik a játékot.

Ütközésjelzők

Az ütközési jelek olyan események, amelyeket a fizikai motor indít el ütközés esetén. Ezek a jelek lehetőséget biztosítanak az objektumok számára, hogy kommunikáljanak egymással, és reagáljanak az ütközésekre. A Godot-ban ütközési jelekhez kapcsolódhat egyéni logika végrehajtásához, amikor konkrét ütközési események történnek.

Tegyük fel például, hogy hangeffektust szeretne játszani, amikor a játékos karakter ütközik egy gyűjthető tárgyjal. A következőképpen érheti el ezt ütközési jelek segítségével:

# Inside the player character's script
func _ready():
connect("body_entered", self, "_on_body_entered")

func _on_body_entered(body: Node):
if body.is_in_group("collectible"):
# Play a sound effect
play_collectible_sound()

# Perform additional logic like collecting the item

# Remove the collectible from the scene
body.queue_free()

Ebben a példában a body_entered jelet bocsát ki, amikor a játékos karakter ütközik egy másik fizikai testtel. Ennek a jelnek a csatlakoztatásával a _on_body_entered funkció segítségével reagálhat az ütközési eseményre. Ha az ütköző test a gyűjthető csoport, megteheti szerzői jogoktól mentes hanghatást játszhat le.

Ütközéses maszkok

Az ütközési maszkok lehetővé teszik annak szabályozását, hogy mely ütközési rétegek léphetnek kölcsönhatásba egymással. Minden ütközési réteg egy bitnek felel meg a bitmaszkban. Ütközési rétegek és maszkok objektumokhoz rendelésével finomhangolhatja, hogy mely objektumok ütköznek egymással, és optimalizálhatja a teljesítményt.

Képzelje el például, hogy ellenségei és golyói vannak a játékban. Azt akarja, hogy az ellenségek platformokkal ütközzenek, de egymással ne. Azt is szeretné, ha a golyók az ellenségekkel ütköznének, de nem a platformokkal. A következőképpen érheti el ezt ütközési maszkok használatával:

# Inside the enemy's script
func _ready():
# Disable collision with other enemies
set_collision_mask_value(2, false)

# Enable collision with platforms
set_collision_mask_value(3, true)

# Inside the bullet's script
func _ready():
# Enable collision with enemies
set_collision_mask_value(2, true)

# Disable collision with platforms
set_collision_mask_value(3, false)

Az ütközési maszkok szelektív engedélyezésével vagy letiltásával szabályozhatja, hogy mely objektumok ütközhetnek egymással, ami pontos és hatékony ütközési interakciókat eredményez.

Az ütközésészlelés legjobb gyakorlatai

A zökkenőmentes játékmenet és a hatékony ütközésészlelés érdekében vegye figyelembe ezeket a bevált módszereket.

Egyszerű alakzatok használata

Az összetett ütközési alakzatok erőforrásigényesek lehetnek. Amikor csak lehetséges, használjon egyszerű formákat, például köröket és téglalapokat az ütközések észleléséhez.

Réteg ütközési maszkok

A Godot lehetővé teszi ütközési rétegek és maszkok meghatározását. Ezekkel szabályozhatja, hogy mely objektumok ütközzenek egymással, optimalizálva a teljesítményt.

Például egy platformer játékban a játékos ugrálhat a platformokon és csússzon a falak mentén. Az ütközési rétegek és maszkok megfelelő beállításával különböző viselkedéseket érhet el.

Ütközéscsoportok

Csoportosítsa a hasonló ütközési tulajdonságokkal rendelkező objektumokat a könnyebb kezelés és a hatékony ütközésészlelés érdekében.

Határoló dobozok

A teljesítmény optimalizálása érdekében használjon határolókereteket, hogy gyorsan ellenőrizze, hogy vannak-e objektumok a közelben, mielőtt pontos ütközésérzékelést hajtana végre.

Használjon kinematikus lekérdezéseket

A Godot kinematikus lekérdezéseket biztosít az ütközésellenőrzés végrehajtásához anélkül, hogy az objektumot ténylegesen elmozdítaná. Ez hasznos lehet az ütközések előrejelzésére, mielőtt azok bekövetkeznének.

A Godot-játékok vonzóbbá tétele az ütközésészlelés segítségével

A hatékony ütközésérzékelés beépítése a Godot-játékba nem csak a zökkenőmentes interakciót biztosítja a karakterek és a környezet között, hanem lehetőséget nyit a kreatív játékmenetre is mechanika.

Legyen szó platform kihívásokról, rejtvényfejtésről vagy harci forgatókönyvekről, az ütközésészlelés a játékosok elkötelezettségének középpontjában áll. Az ütközésészlelés hozzáadásával olyan játékot hozhat létre, amely zökkenőmentes és dinamikus interakcióival magával ragadja a játékosokat.