Törmäysten havaitseminen vaikuttaa useimpiin pelin osiin, aina siitä, miten pelaaja seisoo alustalla vihollisten tuhoamiseen.

Törmäysten havaitseminen on yksi pelikehityksen kriittisistä näkökohdista, ja se vaikuttaa merkittävästi pelaajakokemukseen. Tarkka törmäystunnistus varmistaa, että pelihahmot ovat saumattomasti vuorovaikutuksessa ympäristönsä kanssa luoden upoutumisen ja realismin tunteen.

Godot, suosittu avoimen lähdekoodin pelimoottori, tarjoaa tehokkaita työkaluja tehokkaaseen törmäysten havaitsemiseen, mikä johtaa sujuvaan ja mukaansatempaavaan pelaamiseen.

Godot-pelin perustaminen

Ennen kuin aloitat, luo yksinkertainen 2D-tasohyppelypeli Godot 4:ssä. Aloita luomalla pelin kohtaus pelaajahahmolla ja alustoilla.

Tässä artikkelissa käytetty koodi on saatavilla tässä GitHub-arkisto ja sen käyttö on ilmaista MIT-lisenssin alaisena.

Luo uusi kohtaus ja lisää a CharacterBody2D node juurisolmuna. Lisää Sprite2D solmu lapsena CharacterBody2D esittää visuaalisesti pelaajan hahmoa.

Seuraava, lisää liikettä soittimeen merkki GDScriptillä:

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)

Lisää lopuksi alustat kohtaukseen käyttämällä StaticBody2D solmut suorittaaksesi perusasetukset loppuun.

Erilaiset törmäysmuodot

Godot tarjoaa erilaisia ​​törmäysmuotoja, jotka sopivat erilaisiin peliobjekteihin. Nämä törmäysmuodot auttavat määrittelemään tarkasti alueen, jolla törmäyksen havaitseminen tapahtuu.

Ennen kuin sukellat erilaisiin törmäysmuotoihin, on tärkeää huomata, että voit liittää sellaisen suoraan pelaajahahmoon määrittääksesi sen törmäysalueen. Tämän avulla voit hallita tarkkaa aluetta törmäyksen havaitsemiseksi.

Ympyrän törmäysmuoto

Ympyrän törmäysmuoto on erityisen hyödyllinen hahmoille, joiden on oltava vuorovaikutuksessa ympäristön kanssa säteittäisesti. Voit käyttää tätä muotoa hahmoille, joilla on pyöreä tai pallomainen osumalaatikko. Ympyrän törmäysmuodon lisääminen pelaajahahmoosi:

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

Suorakulmion törmäysmuoto

Suorakaiteen muotoiset törmäysmuodot sopivat hahmoille, joilla on enemmän laatikkomainen tai suorakulmainen muoto. Voit lisätä suorakulmion törmäysmuodon seuraavasti:

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

Kupera monikulmion törmäysmuoto

Kuperat monikulmion törmäysmuodot tarjoavat suurta joustavuutta hahmoille, joiden muoto on epäsäännöllinen tai ei-suorakulmainen. Voit käyttää tätä muotoa vastaamaan tiiviisti hahmosi ääriviivoja. Kuperan monikulmion törmäysmuodon lisääminen:

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

Valitsemalla sopivan törmäysmuodon ja kiinnittämällä sen pelaajahahmoon, voit tarkasti havaita törmäykset määrätyllä alueella, mikä parantaa pelin vuorovaikutuksen tarkkuutta maailman.

Törmäysten havaitseminen

Kohteiden välisten törmäysten havaitseminen on välttämätöntä vuorovaikutusten ja pelimekaniikan toteuttamiseksi. Godotissa voit saavuttaa tämän käyttämällä sisäänrakennettua fysiikkamoottoria.

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

Alla on tulos:

Törmäyssignaalit ja törmäysnaamarit

Godot tarjoaa törmäyssignaaleja ja törmäysmaskeja tehokkaina työkaluina, jotka lisäävät pelisi hienostuneisuutta.

Törmäyssignaalit

Törmäyssignaalit ovat tapahtumia, jotka fysiikkamoottori laukaisee törmäysten sattuessa. Nämä signaalit tarjoavat kohteille tavan kommunikoida keskenään ja reagoida törmäyksiin. Godotissa voit muodostaa yhteyden törmäyssignaaleihin mukautetun logiikan suorittamiseksi, kun tiettyjä törmäystapahtumia tapahtuu.

Oletetaan esimerkiksi, että haluat soittaa äänitehosteen, kun pelaajahahmo törmää keräilyesineeseen. Näin voit saavuttaa tämän käyttämällä törmäyssignaaleja:

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

Tässä esimerkissä body_entered signaali lähetetään, kun pelaajahahmo törmää toiseen fysiikan kappaleeseen. Kytkemällä tämän signaalin _on_body_entered -toiminnolla voit reagoida törmäystapahtumaan. Jos törmäävä kappale on sisällä kerättävä ryhmässä voit toistaa tekijänoikeusvapaata äänitehostetta.

Törmäysmaskit

Törmäysmaskien avulla voit hallita, mitkä törmäystasot voivat olla vuorovaikutuksessa toistensa kanssa. Jokainen törmäyskerros vastaa bittiä bittimaskissa. Määrittämällä kohteille törmäyskerroksia ja maskeja voit hienosäätää, mitkä kohteet törmäävät toisiinsa ja optimoida suorituskykyä.

Kuvittele esimerkiksi, että pelissäsi on vihollisia ja luoteja. Haluat vihollisten törmäävän alustojen kanssa, mutta ei toistensa kanssa. Haluat myös luotien törmäävän vihollisiin, mutta ei alustoihin. Näin voit saavuttaa tämän käyttämällä törmäysmaskeja:

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

Ottamalla törmäysmaskit valikoivasti käyttöön tai poistamalla ne käytöstä, hallitset, mitkä kohteet voivat törmätä toisiinsa, mikä johtaa tarkkoihin ja tehokkaisiin törmäysvuorovaikutuksiin.

Parhaat käytännöt törmäysten havaitsemiseen

Harkitse näitä parhaita käytäntöjä varmistaaksesi sujuvan pelaamisen ja tehokkaan törmäysten havaitsemisen.

Käytä yksinkertaisia ​​muotoja

Monimutkaiset törmäysmuodot voivat olla resurssivaltaisia. Käytä törmäysten havaitsemiseen aina kun mahdollista yksinkertaisia ​​muotoja, kuten ympyröitä ja suorakulmioita.

Kerrosten törmäysmaskit

Godotin avulla voit määrittää törmäyskerroksia ja maskeja. Käytä näitä hallitaksesi, mitkä kohteet törmäävät toisiinsa, mikä optimoi suorituskykyä.

Esimerkiksi tasohyppelypelissä pelaaja voi hypätä alustoille ja liukua seiniä pitkin. Asettamalla törmäystasot ja maskit asianmukaisesti voit saavuttaa erilaisia ​​käyttäytymismalleja.

Törmäysryhmät

Ryhmittele objektit, joilla on samanlaiset törmäysominaisuudet, helpottaaksesi hallintaa ja tehokasta törmäysten havaitsemista.

Rajoituslaatikot

Suorituskyvyn optimoimiseksi käytä rajausruutuja tarkistaaksesi nopeasti, ovatko kohteet lähellä, ennen kuin suoritat tarkan törmäyksen havaitsemisen.

Käytä kinemaattisia kyselyitä

Godot tarjoaa kinemaattisia kyselyitä törmäystarkistuksia varten ilman, että kohdetta siirretään. Tämä voi olla hyödyllistä ennakoitaessa törmäyksiä ennen kuin ne tapahtuvat.

Tee Godot-peleistä kiinnostavampia törmäystunnistuksen avulla

Tehokkaan törmäystunnistuksen sisällyttäminen Godot-peliisi ei ainoastaan ​​takaa saumatonta vuorovaikutusta hahmojen ja ympäristön välillä, mutta se avaa myös mahdollisuuksia luovalle pelaamiselle mekaniikka.

Olipa kyseessä tasohyppelyhaasteet, pulmien ratkaiseminen tai taisteluskenaariot, törmäysten havaitseminen on pelaajien sitoutumisen ytimessä. Lisäämällä törmäystunnistuksen voit luoda pelin, joka valloittaa pelaajat sujuvalla ja dynaamisella vuorovaikutuksellaan.