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