Zaznavanje trčenja vpliva na večino delov vaše igre, od tega, kako igralec stoji na platformi, do tega, kako uniči sovražnike.

Zaznavanje trkov je eden od kritičnih vidikov razvoja igre, ki pomembno vpliva na izkušnjo igralca. Natančno zaznavanje trkov zagotavlja, da igralni liki brezhibno komunicirajo z okoljem, kar ustvarja občutek potopljenosti in realizma.

Godot, priljubljen odprtokodni igralni mehanizem, ponuja zmogljiva orodja za izvajanje učinkovitega zaznavanja trkov, kar ima za posledico gladko in privlačno igranje.

Nastavitev igre Godot

Preden začnete, ustvarite preprosto 2D platformsko igro v Godotu 4. Začnite z nastavitvijo igralne scene z likom igralca in platformami.

Koda, uporabljena v tem članku, je na voljo tukaj Repozitorij GitHub in je brezplačen za uporabo pod licenco MIT.

Ustvarite novo sceno in dodajte a CharacterBody2D vozlišče kot korensko vozlišče. Dodaj a Sprite2D vozlišče kot podrejeno vozlišče CharacterBody2D za vizualno predstavitev lika igralca.

Naslednji, dodajanje gibanja igralcu znak z uporabo GDScript:

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)

Nazadnje dodajte platforme na sceno z uporabo Statično telo2D vozlišča za dokončanje osnovne nastavitve.

Različne oblike trkov

Godot nudi različne oblike trkov, ki ustrezajo različnim vrstam predmetov igre. Te oblike trkov pomagajo natančno določiti območje, znotraj katerega poteka zaznavanje trkov.

Preden se potopite v različne oblike trkov, je pomembno omeniti, da lahko eno pritrdite neposredno na igralčev lik, da določite njegovo območje trka. To vam omogoča nadzor natančnega območja za zaznavanje trka.

Oblika trka kroga

Krožna oblika trka je še posebej uporabna za like, ki morajo radialno komunicirati z okoljem. To obliko lahko uporabite za like s krožnim ali sferičnim poljem za zadetke. Če želite liku igralca dodati obliko trka v krogu:

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

Pravokotna trčna oblika

Pravokotne trčne oblike so primerne za like z bolj škatlasto ali pravokotno obliko. Tukaj je opisano, kako lahko dodate pravokotno obliko trka:

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

Konveksna mnogokotna trčna oblika

Konveksne mnogokotne trčne oblike zagotavljajo veliko prilagodljivost za znake nepravilnih ali nepravokotnih oblik. To obliko lahko uporabite za natančno ujemanje z obrisom vašega značaja. Če želite dodati obliko trka konveksnega mnogokotnika:

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

Če izberete ustrezno obliko trka in jo pritrdite na lik igralca, lahko natančno zaznavanje trkov znotraj označenega območja, kar poveča natančnost interakcije z igro svetu.

Zaznavanje trkov

Zaznavanje trkov med predmeti je bistveno za izvajanje interakcij in mehanike igranja. V Godotu lahko to dosežete z vgrajenim fizikalnim motorjem.

# 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")

Spodaj je rezultat:

Signali za trčenje in maske za trčenje

Godot ponuja signale trkov in maske trkov kot zmogljiva orodja za dodajanje prefinjenosti vaši igri.

Signali za trčenje

Signali trkov so dogodki, ki jih fizikalni motor sproži, ko pride do trkov. Ti signali omogočajo predmetom medsebojno komunikacijo in odziv na trke. V Godotu se lahko povežete s signali trka, da izvedete logiko po meri, ko pride do določenih dogodkov trka.

Recimo, da želite predvajati zvočni učinek, ko igralec trči z zbirateljskim predmetom. Tukaj je opisano, kako lahko to dosežete z uporabo signalov za trk:

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

V tem primeru je body_entered signal se odda, ko igralčev lik trči v drugo fizično telo. S povezavo tega signala z _na_telesu_vneseno funkcijo, se lahko odzovete na dogodek trka. Če je trčeno telo v zbirateljsko skupina, lahko predvajajte zvočni učinek brez avtorskih pravic.

Maske proti trčenju

Maske trkov vam omogočajo, da nadzirate, katere plasti trkov lahko medsebojno delujejo. Vsaka plast trka ustreza bitu v bitni maski. Če objektom dodelite plasti in maske trkov, lahko natančno nastavite, kateri predmeti trčijo drug ob drugega, in optimizirate zmogljivost.

Na primer, predstavljajte si, da imate v igri sovražnike in naboje. Želite, da sovražniki trčijo ob platforme, ne pa med seboj. Prav tako želite, da krogle trčijo v sovražnike, ne pa v platforme. Tukaj je opisano, kako lahko to dosežete z uporabo mask trkov:

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

Če selektivno omogočite ali onemogočite maske trkov, nadzirate, kateri predmeti lahko trčijo drug ob drugega, kar povzroči natančne in učinkovite interakcije trkov.

Najboljše prakse za zaznavanje trčenja

Če želite zagotoviti gladko igranje in učinkovito zaznavanje trkov, upoštevajte te najboljše prakse.

Uporabite preproste oblike

Zapletene trčne oblike lahko zahtevajo veliko virov. Kadarkoli je mogoče, uporabite preproste oblike, kot so krogi in pravokotniki, za zaznavanje trkov.

Maske za trčenje plasti

Godot vam omogoča definiranje plasti in mask trkov. Uporabite jih za nadzor, kateri predmeti trčijo drug ob drugega, in tako optimizirajte delovanje.

Na primer, v igri platforme, igralec lahko skače po platformah in drsi po stenah. Z ustrezno nastavitvijo plasti in mask trkov lahko dosežete različna vedenja.

Kolizijske skupine

Združite predmete s podobnimi lastnostmi trkov za lažje upravljanje in učinkovito zaznavanje trkov.

Omejitveni okvirji

Za optimizacijo delovanja uporabite omejevalne okvirje, da hitro preverite, ali so predmeti v bližini, preden izvedete natančno zaznavanje trka.

Uporabite kinematične poizvedbe

Godot zagotavlja kinematične poizvedbe za izvedbo preverjanja trkov, ne da bi dejansko premaknili predmet. To je lahko koristno za napovedovanje trkov, preden se zgodijo.

Naredite igre Godot bolj privlačne z zaznavanjem trkov

Vključitev učinkovitega zaznavanja trkov v vašo igro Godot ne zagotavlja samo brezhibne interakcije med liki in okoljem, ampak tudi odpira možnosti za kreativno igranje mehanika.

Ne glede na to, ali gre za izzive platforme, reševanje ugank ali bojne scenarije, je zaznavanje trkov v središču sodelovanja igralcev. Če dodate zaznavanje trkov, lahko ustvarite igro, ki očara igralce s svojimi gladkimi in dinamičnimi interakcijami.