Kokkupõrketuvastus mõjutab enamikku teie mängu osi, alates sellest, kuidas teie mängija platvormil seisab, kuni vaenlaste hävitamiseni.
Kokkupõrke tuvastamine on mänguarenduse üks kriitilisi aspekte, mis mõjutab oluliselt mängija kogemust. Täpne kokkupõrketuvastus tagab, et mängutegelased suhtlevad oma keskkonnaga sujuvalt, luues endasse süvenemise ja realistlikkuse tunde.
Godot, populaarne avatud lähtekoodiga mängumootor, pakub võimsaid tööriistu tõhusaks kokkupõrgete tuvastamiseks, mille tulemuseks on sujuv ja kaasahaarav mäng.
Godot' mängu seadistamine
Enne alustamist looge Godot 4-s lihtne 2D-platvormimäng. Alustage mängustseeni seadistamisest mängija tegelaskuju ja platvormidega.
Selles artiklis kasutatud kood on saadaval selles GitHubi hoidla ja seda saate MIT-i litsentsi alusel tasuta kasutada.
Looge uus stseen ja lisage a CharacterBody2D sõlme juursõlmena. Lisa Sprite2D sõlme lapsena CharacterBody2D mängija iseloomu visuaalseks kujutamiseks.
Järgmiseks lisage mängijale liikumist märk GDScripti abil:
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)
Lõpuks lisage stseenile platvormid, kasutades StaticBody2D sõlmed põhiseadistuse lõpuleviimiseks.
Erinevad kokkupõrkekujud
Godot pakub mitmesuguseid kokkupõrkekujusid, mis sobivad erinevat tüüpi mänguobjektidele. Need kokkupõrkekujud aitavad täpselt määratleda ala, kus kokkupõrke tuvastamine toimub.
Enne erinevatesse kokkupõrkekujudesse sukeldumist on oluline märkida, et saate selle kokkupõrkeala määratlemiseks kinnitada otse mängija tegelase külge. See võimaldab teil juhtida kokkupõrke tuvastamiseks täpset piirkonda.
Ringi kokkupõrke kuju
Ringi kokkupõrkekuju on eriti kasulik tegelastele, kes peavad keskkonnaga radiaalselt suhtlema. Seda kujundit saate kasutada ümmarguse või sfäärilise kastiga tegelaste jaoks. Mängija tegelasele ringi kokkupõrkekuju lisamiseks toimige järgmiselt.
# 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)
Ristküliku kokkupõrkekuju
Ristkülikukujulised põrkekujud sobivad rohkem kasti- või ristkülikukujulistele tegelastele. Ristküliku kokkupõrkekuju lisamiseks tehke järgmist.
# 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)
Kumer hulknurga kokkupõrkekuju
Kumerad hulknurga põrkekujud pakuvad ebakorrapärase või mitteristkülikukujulise kujuga tegelastele suurt paindlikkust. Saate kasutada seda kujundit, et sobitada täpselt oma tegelase piirjoontega. Kumera hulknurga kokkupõrkekuju lisamiseks tehke järgmist.
# 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)
Valides sobiva kokkupõrkekuju ja kinnitades selle mängija tegelase külge, saate täpselt tuvastada kokkupõrked määratud piirkonnas, suurendades mänguga suhtlemise täpsust maailmas.
Kokkupõrgete tuvastamine
Objektide vaheliste kokkupõrgete tuvastamine on interaktsioonide ja mängumehaanika rakendamiseks hädavajalik. Godot's saate seda saavutada sisseehitatud füüsikamootori abil.
# 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")
Allpool on väljund:
Kokkupõrkesignaalid ja kokkupõrkemaskid
Godot pakub kokkupõrkesignaale ja kokkupõrkemaske kui võimsaid tööriistu, mis lisavad teie mängule keerukust.
Kokkupõrke signaalid
Kokkupõrkesignaalid on sündmused, mille füüsikamootor vallandab kokkupõrke korral. Need signaalid võimaldavad objektidel üksteisega suhelda ja kokkupõrgetele reageerida. Godot'is saate luua ühenduse kokkupõrkesignaalidega, et konkreetsete kokkupõrkesündmuste korral kohandatud loogikat rakendada.
Oletagem näiteks, et soovite mängida heliefekti, kui mängija tegelane põrkub kogutava esemega. Kokkupõrkesignaalide abil saate seda saavutada järgmiselt.
# 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()
Selles näites on body_entered signaal väljastatakse, kui mängija tegelane põrkub teise füüsikalise kehaga. Ühendades selle signaali _on_body_sisestatud funktsiooni, saate reageerida kokkupõrkesündmusele. Kui põrkuva keha on kogutav rühma, saate mängida autoriõigusteta heliefekti.
Kokkupõrke maskid
Kokkupõrkemaskid võimaldavad teil kontrollida, millised kokkupõrkekihid võivad üksteisega suhelda. Iga põrkekiht vastab bitimaski bitile. Objektidele põrkekihtide ja maskide määramisega saate täpselt häälestada, millised objektid põrkuvad üksteisega ja optimeerida jõudlust.
Näiteks kujutage ette, et teie mängus on vaenlasi ja täppe. Tahad, et vaenlased põrkaksid kokku platvormidega, kuid mitte üksteisega. Samuti soovite, et kuulid põrkaksid kokku vaenlastega, kuid mitte platvormidega. Kokkupõrkemaskide abil saate seda saavutada järgmiselt.
# 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)
Kokkupõrkemaskide valikulise lubamise või keelamisega saate juhtida, millised objektid võivad üksteisega kokku põrkuda, mille tulemuseks on täpne ja tõhus kokkupõrke koostoime.
Kokkupõrke tuvastamise parimad tavad
Sujuva mängimise ja tõhusa kokkupõrgete tuvastamise tagamiseks kaaluge neid parimaid tavasid.
Kasutage lihtsaid kujundeid
Keerulised kokkupõrkekujud võivad olla ressursimahukad. Kui vähegi võimalik, kasutage kokkupõrke tuvastamiseks lihtsaid kujundeid, nagu ringid ja ristkülikud.
Kihtide kokkupõrkemaskid
Godot võimaldab teil määratleda kokkupõrkekihte ja maske. Kasutage neid, et juhtida, millised objektid üksteisega kokku põrkuvad, optimeerides jõudlust.
Näiteks platvormimängus mängija võib hüpata platvormidele ja libistage mööda seinu. Põrkekihtide ja maskide sobiva seadistamisega saate saavutada erineva käitumise.
Kokkupõrkerühmad
Rühmitage sarnaste põrkeomadustega objektid lihtsamaks haldamiseks ja tõhusaks kokkupõrgete tuvastamiseks.
Piirdekarbid
Toimivuse optimeerimiseks kasutage piiravaid kaste, et enne täpse kokkupõrke tuvastamise teostamist kiiresti kontrollida, kas läheduses on objekte.
Kasutage kinemaatilisi päringuid
Godot pakub kinemaatilisi päringuid kokkupõrgete kontrollimiseks ilma objekti tegelikult liigutamata. See võib olla kasulik kokkupõrgete ennustamiseks enne nende toimumist.
Muuda Godoti mängud kokkupõrketuvastusega kaasahaaravamaks
Tõhusa kokkupõrketuvastuse kaasamine oma Godoti mängu ei taga mitte ainult sujuvat suhtlust tegelaste ja keskkonna vahel, vaid avab ka võimalused loominguliseks mängimiseks mehaanika.
Olgu selleks platvormiväljakutsed, mõistatuste lahendamine või võitlusstsenaariumid, kokkupõrgete tuvastamine on mängija kaasamise keskmes. Lisades kokkupõrketuvastuse, saate luua mängu, mis võlub mängijaid oma sujuva ja dünaamilise suhtlusega.