Otkrivanje sudara utječe na većinu dijelova vaše igre, od toga kako vaš igrač stoji na platformi do toga kako uništava neprijatelje.

Otkrivanje sudara jedan je od kritičnih aspekata razvoja igre, koji značajno utječe na iskustvo igrača. Precizno otkrivanje sudara osigurava besprijekornu interakciju likova u igri sa svojim okruženjem, stvarajući osjećaj uranjanja i realizma.

Godot, popularni open-source motor za igre, pruža snažne alate za implementaciju učinkovite detekcije sudara, što rezultira glatkim i zanimljivim igranjem.

Postavljanje igre Godot

Prije početka kreirajte jednostavnu 2D platformer igru ​​u Godotu 4. Započnite postavljanjem scene igre s likom igrača i platformama.

Kôd korišten u ovom članku dostupan je u ovom GitHub spremište i besplatan je za korištenje pod MIT licencom.

Napravite novu scenu i dodajte a CharacterBody2D čvor kao korijenski čvor. Dodati Sprite2D čvor kao dijete od CharacterBody2D vizualno predstaviti karakter igrača.

Sljedeći, dodati kretanje igraču znak pomoću GDScripta:

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)

Na kraju, dodajte platforme na scenu pomoću StaticBody2D čvorove za dovršetak osnovnog postavljanja.

Različiti oblici sudara

Godot nudi niz oblika sudara koji odgovaraju različitim vrstama objekata u igri. Ovi oblici sudara pomažu u preciznom definiranju područja unutar kojeg se odvija otkrivanje sudara.

Prije nego što zaronite u različite oblike sudara, važno je napomenuti da jedan možete pričvrstiti izravno na lik igrača kako biste definirali njegovo područje sudara. To vam omogućuje da kontrolirate točnu regiju za otkrivanje sudara.

Kružni oblik sudara

Kružni oblik sudara posebno je koristan za likove koji moraju radijalno komunicirati s okolinom. Ovaj oblik možete koristiti za likove s kružnim ili sfernim okvirom za pogodak. Da biste svom liku igrača dodali kružni oblik sudara:

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

Pravokutni oblik sudara

Pravokutni oblici sudara prikladni su za likove s više kutijastim ili pravokutnim oblikom. Evo kako možete dodati pravokutni oblik sudara:

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

Konveksni poligonski oblik sudara

Konveksni poligonalni oblici sudara pružaju veliku fleksibilnost za likove nepravilnog ili nepravokutnog oblika. Možete upotrijebiti ovaj oblik kako biste što više odgovarali obrisu vašeg lika. Da biste dodali oblik sudara konveksnog poligona:

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

Odabirom odgovarajućeg oblika sudara i njegovim pričvršćivanjem na lik igrača, možete precizno otkriti sudare unutar označenog područja, povećavajući točnost interakcije s igrom svijet.

Otkrivanje sudara

Otkrivanje sudara između objekata ključno je za implementaciju interakcija i mehanike igranja. U Godotu to možete postići pomoću ugrađenog mehanizma fizike.

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

Ispod je izlaz:

Signali sudara i maske sudara

Godot pruža signale sudara i maske sudara kao moćne alate za dodavanje sofisticiranosti vašoj igri.

Signali sudara

Signali sudara su događaji koje fizički motor aktivira kada dođe do sudara. Ovi signali omogućuju objektima da međusobno komuniciraju i reagiraju na sudare. U Godotu se možete povezati sa signalima sudara kako biste izvršili prilagođenu logiku kada se dogode određeni događaji sudara.

Na primjer, recimo da želite reproducirati zvučni efekt kada se lik igrača sudari s kolekcionarskim predmetom. Evo kako to možete postići pomoću signala sudara:

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

U ovom primjeru, tijelo_uneseno signal se emitira kada se lik igrača sudari s drugim fizičkim tijelom. Spajanjem ovog signala na _na_tijelu_uneseno funkciju, možete odgovoriti na događaj sudara. Ako se sudarajuće tijelo nalazi u sakupljivo grupa, možete reproducirajte zvučni efekt bez autorskih prava.

Maske za sudar

Maske sudara vam omogućuju da kontrolirate koji slojevi sudara mogu međusobno komunicirati. Svaki sloj sudara odgovara bitu u bitmaski. Dodjeljivanjem slojeva i maski sudara objektima možete fino podesiti koji se objekti međusobno sudaraju i optimizirati performanse.

Na primjer, zamislite da u igri imate neprijatelje i metke. Želite da se neprijatelji sudaraju s platformama, ali ne međusobno. Također želite da se meci sudaraju s neprijateljima, ali ne i s platformama. Evo kako to možete postići pomoću maski sudara:

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

Selektivnim omogućavanjem ili onemogućavanjem maski sudara kontrolirate koji se objekti mogu sudarati jedni s drugima, što rezultira točnim i učinkovitim međudjelovanjem sudara.

Najbolji primjeri iz prakse za otkrivanje sudara

Kako biste osigurali glatko igranje i učinkovito otkrivanje sudara, razmotrite ove najbolje prakse.

Koristite jednostavne oblike

Složeni oblici sudara mogu zahtijevati velike resurse. Kad god je moguće, koristite jednostavne oblike poput krugova i pravokutnika za otkrivanje sudara.

Maske sudara slojeva

Godot vam omogućuje da definirate slojeve i maske sudara. Koristite ih da kontrolirate koji se objekti sudaraju jedni s drugima, optimizirajući izvedbu.

Na primjer, u igrici platformer, igrač može skakati po platformama i kliziti po zidovima. Odgovarajućim postavljanjem slojeva i maski sudara možete postići različita ponašanja.

Grupe sudara

Grupirajte objekte sa sličnim svojstvima sudara za lakše upravljanje i učinkovito otkrivanje sudara.

Ograničavajući okviri

Za optimizaciju performansi, koristite granične okvire za brzu provjeru jesu li objekti u blizini prije izvođenja preciznog otkrivanja sudara.

Koristite kinematičke upite

Godot pruža kinematičke upite za izvođenje provjere sudara bez stvarnog pomicanja objekta. To može biti korisno za predviđanje sudara prije nego što se dogode.

Činimo Godot igre zanimljivijim s detekcijom sudara

Uključivanje učinkovite detekcije sudara u igru ​​Godot ne samo da osigurava besprijekornu interakciju između likova i okoline, ali također otvara mogućnosti za kreativno igranje mehanika.

Bilo da se radi o platformskim izazovima, rješavanju zagonetki ili borbenim scenarijima, otkrivanje sudara je srž angažmana igrača. Dodavanjem detekcije sudara možete stvoriti igru ​​koja osvaja igrače svojim glatkim i dinamičnim interakcijama.