Sadursmju noteikšana ietekmē lielāko daļu spēles daļu, sākot no tā, kā spēlētājs stāv uz platformas un beidzot ar to, kā viņš iznīcina ienaidniekus.

Sadursmju noteikšana ir viens no spēles izstrādes kritiskajiem aspektiem, kas būtiski ietekmē spēlētāja pieredzi. Precīza sadursmju noteikšana nodrošina, ka spēļu varoņi nemanāmi mijiedarbojas ar savu vidi, radot iedziļināšanās un reālisma sajūtu.

Godot, populārs atvērtā pirmkoda spēļu dzinējs, nodrošina jaudīgus rīkus efektīvai sadursmju noteikšanai, tādējādi nodrošinot vienmērīgu un aizraujošu spēli.

Godota spēles iestatīšana

Pirms sākat, izveidojiet vienkāršu 2D platformera spēli Godot 4. Sāciet, iestatot spēles ainu ar spēlētāja tēlu un platformām.

Šajā rakstā izmantotais kods ir pieejams šajā GitHub repozitorijs un to varat izmantot bez maksas saskaņā ar MIT licenci.

Izveidojiet jaunu ainu un pievienojiet a CharacterBody2D mezglu kā saknes mezglu. Pievienojiet a Sprite2D mezgls kā bērns no CharacterBody2D lai vizuāli attēlotu spēlētāja raksturu.

instagram viewer

Nākamais, pievienot atskaņotājam kustību rakstzīme, izmantojot GDScript:

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)

Visbeidzot pievienojiet ainai platformas, izmantojot StaticBody2D mezgliem, lai pabeigtu pamata iestatīšanu.

Dažādas sadursmes formas

Godot piedāvā dažādas sadursmes formas, kas atbilst dažāda veida spēļu objektiem. Šīs sadursmes formas palīdz precīzi noteikt apgabalu, kurā notiek sadursmes noteikšana.

Pirms iedziļināties dažādās sadursmes formās, ir svarīgi ņemt vērā, ka varat to pievienot tieši spēlētāja tēlam, lai noteiktu tā sadursmes zonu. Tas ļauj jums kontrolēt precīzu reģionu, lai noteiktu sadursmi.

Apļa sadursmes forma

Apļa sadursmes forma ir īpaši noderīga rakstzīmēm, kurām nepieciešams radiāli mijiedarboties ar vidi. Šo formu varat izmantot rakstzīmēm ar apļveida vai sfērisku hitbox. Lai savam spēlētāja tēlam pievienotu apļa sadursmes formu:

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

Taisnstūra sadursmes forma

Taisnstūra sadursmes formas ir piemērotas rakstzīmēm ar vairāk kastes vai taisnstūrveida formu. Lūk, kā varat pievienot taisnstūra sadursmes formu.

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

Izliekta daudzstūra sadursmes forma

Izliektas daudzstūru sadursmes formas nodrošina lielu elastību rakstzīmēm ar neregulārām vai netaisnstūrveida formām. Varat izmantot šo formu, lai precīzi atbilstu jūsu rakstura kontūrām. Lai pievienotu izliektu daudzstūra sadursmes formu:

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

Izvēloties atbilstošu sadursmes formu un pievienojot to spēlētāja tēlam, jūs varat precīzi noteikt sadursmes norādītajā zonā, uzlabojot mijiedarbības ar spēli precizitāti pasaulē.

Sadursmju noteikšana

Objektu sadursmju noteikšana ir būtiska mijiedarbības un spēles mehānikas īstenošanai. Godotā ​​to var panākt, izmantojot iebūvēto fizikas dzinēju.

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

Zemāk ir izvade:

Sadursmes signāli un sadursmes maskas

Godot nodrošina sadursmes signālus un sadursmes maskas kā spēcīgus rīkus, lai pievienotu jūsu spēlei izsmalcinātību.

Sadursmes signāli

Sadursmes signāli ir notikumi, ko fizikas dzinējs iedarbina, kad notiek sadursmes. Šie signāli nodrošina veidu, kā objekti var sazināties savā starpā un reaģēt uz sadursmēm. Programmā Godot varat izveidot savienojumu ar sadursmes signāliem, lai izpildītu pielāgotu loģiku, kad notiek konkrēti sadursmes notikumi.

Piemēram, pieņemsim, ka vēlaties atskaņot skaņas efektu, kad spēlētāja varonis saduras ar kolekcionējamu priekšmetu. Lūk, kā to panākt, izmantojot sadursmes signālus:

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

Šajā piemērā body_entered signāls tiek izstarots, kad spēlētāja varonis saduras ar citu fizikas ķermeni. Savienojot šo signālu ar _on_body_ievadīts funkciju, varat reaģēt uz sadursmes gadījumu. Ja sadursmes ķermenis atrodas kolekcionējams grupa, jūs varat atskaņojiet skaņas efektu, uz kuru neattiecas autortiesības.

Sadursmes maskas

Sadursmes maskas ļauj kontrolēt, kuri sadursmes slāņi var mijiedarboties viens ar otru. Katrs sadursmes slānis atbilst bitam bitmaskā. Piešķirot objektiem sadursmes slāņus un maskas, varat precīzi noregulēt, kuri objekti saskaras viens ar otru, un optimizēt veiktspēju.

Piemēram, iedomājieties, ka jūsu spēlē ir ienaidnieki un lodes. Jūs vēlaties, lai ienaidnieki saduras ar platformām, bet ne savā starpā. Jūs arī vēlaties, lai lodes saduras ar ienaidniekiem, bet ne ar platformām. Lūk, kā to panākt, izmantojot sadursmes maskas:

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

Selektīvi iespējojot vai atspējojot sadursmes maskas, jūs kontrolējat, kuri objekti var sadurties viens ar otru, tādējādi nodrošinot precīzu un efektīvu sadursmes mijiedarbību.

Paraugprakse sadursmju noteikšanai

Lai nodrošinātu vienmērīgu spēli un efektīvu sadursmju noteikšanu, apsveriet šīs paraugprakses.

Izmantojiet vienkāršas formas

Sarežģītas sadursmes formas var būt resursietilpīgas. Kad vien iespējams, sadursmes noteikšanai izmantojiet vienkāršas formas, piemēram, apļus un taisnstūrus.

Slāņu sadursmes maskas

Godot ļauj definēt sadursmes slāņus un maskas. Izmantojiet tos, lai kontrolētu, kuri objekti saskaras viens ar otru, optimizējot veiktspēju.

Piemēram, platformas spēlē spēlētājs var uzlēkt uz platformām un šļūkt gar sienām. Atbilstoši iestatot sadursmes slāņus un maskas, jūs varat panākt atšķirīgas darbības.

Sadursmes grupas

Grupējiet objektus ar līdzīgām sadursmes īpašībām, lai atvieglotu pārvaldību un efektīvu sadursmes noteikšanu.

Ierobežojošās kastes

Veiktspējas optimizēšanai izmantojiet robežlodziņus, lai pirms precīzas sadursmes noteikšanas ātri pārbaudītu, vai tuvumā atrodas objekti.

Izmantojiet kinemātiskos vaicājumus

Godot nodrošina kinemātiskus vaicājumus, lai veiktu sadursmes pārbaudes, faktiski nepārvietojot objektu. Tas var būt noderīgi, lai prognozētu sadursmes, pirms tās notiek.

Padariet Godot spēles saistošākas ar sadursmju noteikšanu

Efektīvas sadursmju noteikšanas iekļaušana savā Godot spēlē ne tikai nodrošina netraucētu mijiedarbību starp varoņiem un vidi, bet arī paver iespējas radošai spēlei mehānika.

Neatkarīgi no tā, vai tie ir platformas izaicinājumi, mīklu risināšana vai cīņas scenāriji, sadursmju noteikšana ir spēlētāju iesaistīšanās pamatā. Pievienojot sadursmju noteikšanu, varat izveidot spēli, kas aizrauj spēlētājus ar vienmērīgu un dinamisku mijiedarbību.