Откриването на сблъсък засяга повечето части от вашата игра, от това как вашият играч стои на платформа до това как унищожава врагове.

Откриването на сблъсък е един от критичните аспекти на разработката на играта, който значително влияе върху изживяването на играча. Точното откриване на сблъсък гарантира, че игровите герои взаимодействат безпроблемно с околната среда, създавайки усещане за потапяне и реализъм.

Godot, популярен двигател за игри с отворен код, предоставя мощни инструменти за прилагане на ефективно откриване на сблъсъци, което води до плавен и завладяващ геймплей.

Настройване на играта Godot

Преди да започнете, създайте проста 2D платформинг игра в Godot 4. Започнете, като настроите сцената на играта с персонаж на играч и платформи.

Кодът, използван в тази статия, е достъпен в това GitHub хранилище и е безплатен за използване под лиценза на MIT.

Създайте нова сцена и добавете a CharacterBody2D възел като основен възел. Добави Sprite2D възел като дете на CharacterBody2D за визуално представяне на героя на играча.

instagram viewer

Следващия, добавете движение към играча знак с помощта на 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)

Накрая добавете платформи към сцената, като използвате Статично тяло2D възли, за да завършите основната настройка.

Различни форми на сблъсък

Godot предоставя разнообразие от форми на сблъсък, които се грижат за различни типове обекти в играта. Тези форми на сблъсък помагат за точното определяне на зоната, в която се извършва откриването на сблъсък.

Преди да се потопите в различните форми на сблъсък, важно е да отбележите, че можете да прикачите една директно към героя на играча, за да определите неговата зона на сблъсък. Това ви позволява да контролирате точния регион за откриване на сблъсък.

Кръгова форма на сблъсък

Кръговата форма на сблъсък е особено полезна за герои, които трябва да взаимодействат с околната среда радиално. Можете да използвате тази форма за герои с кръгла или сферична кутия за удари. За да добавите кръгова форма на сблъсък към вашия герой на играча:

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

Правоъгълна форма на сблъсък

Правоъгълните форми на сблъсък са подходящи за герои с по-кутия или правоъгълна форма. Ето как можете да добавите правоъгълна форма на сблъсък:

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

Форма на сблъсък на изпъкнал многоъгълник

Изпъкналите многоъгълни сблъсъчни форми осигуряват голяма гъвкавост за герои с неправилна или неправоъгълна форма. Можете да използвате тази форма, за да съответствате точно на очертанията на вашия герой. За да добавите форма на сблъсък на изпъкнал многоъгълник:

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

Като изберете подходящата форма на сблъсък и я прикрепите към героя на играча, можете точно откриват сблъсъци в рамките на определената зона, повишавайки точността на взаимодействията с играта свят.

Откриване на сблъсъци

Откриването на сблъсъци между обекти е от съществено значение за внедряване на взаимодействия и механика на играта. В Godot можете да постигнете това с помощта на вградения физически двигател.

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

По-долу е резултатът:

Сигнали за сблъсък и маски за сблъсък

Godot предоставя сигнали за сблъсък и маски за сблъсък като мощни инструменти за добавяне на изтънченост към вашата игра.

Сигнали за сблъсък

Сигналите за сблъсък са събития, които физическият двигател задейства, когато възникнат сблъсъци. Тези сигнали осигуряват начин на обектите да комуникират помежду си и да реагират на сблъсъци. В Godot можете да се свържете със сигнали за сблъсък, за да изпълните персонализирана логика, когато настъпят специфични събития за сблъсък.

Например, кажете, че искате да пуснете звуков ефект, когато персонажът на играча се сблъска с колекционерски предмет. Ето как можете да постигнете това с помощта на сигнали за сблъсък:

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

В този пример, body_entered сигнал се излъчва, когато персонажът на играча се сблъска с друго физическо тяло. Като свържете този сигнал към _на_тялото_въведено функция, можете да отговорите на събитието сблъсък. Ако сблъскалото се тяло е в колекционерски група, можете възпроизведете звуков ефект без авторски права.

Маски срещу сблъсък

Маските за сблъсък ви позволяват да контролирате кои слоеве за сблъсък могат да взаимодействат един с друг. Всеки слой на сблъсък съответства на бит в битова маска. Чрез присвояване на слоеве и маски за сблъсък на обекти можете да настроите фино кои обекти да се сблъскват един с друг и да оптимизирате производителността.

Например, представете си, че имате врагове и куршуми в играта си. Искате враговете да се сблъскват с платформи, но не и един с друг. Вие също искате куршуми да се сблъскват с врагове, но не и с платформи. Ето как можете да постигнете това с помощта на маски за сблъсък:

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

Чрез селективно активиране или деактивиране на маски за сблъсък вие контролирате кои обекти могат да се сблъскат един с друг, което води до точни и ефективни взаимодействия при сблъсък.

Най-добри практики за откриване на сблъсък

За да осигурите плавен геймплей и ефективно откриване на сблъсък, вземете предвид тези най-добри практики.

Използвайте прости форми

Сложните форми на сблъсък могат да изискват много ресурси. Когато е възможно, използвайте прости форми като кръгове и правоъгълници за откриване на сблъсък.

Маски за сблъсък на слоеве

Godot ви позволява да дефинирате слоеве и маски за сблъсък. Използвайте ги, за да контролирате кои обекти се сблъскват един с друг, като оптимизирате производителността.

Например, в платформинг игра, играчът може да скача върху платформи и се плъзга по стените. Чрез подходящо настройване на слоеве и маски за сблъсък можете да постигнете различно поведение.

Групи за сблъсък

Групирайте обекти с подобни свойства на сблъсък за по-лесно управление и ефективно откриване на сблъсък.

Ограничаващи кутии

За оптимизиране на производителността използвайте ограничаващи полета, за да проверите бързо дали обектите са наблизо, преди да извършите прецизно откриване на сблъсък.

Използвайте кинематични заявки

Godot предоставя кинематични заявки за извършване на проверки за сблъсък, без всъщност да движи обекта. Това може да бъде полезно за прогнозиране на сблъсъци, преди да се случат.

Правене на Godot Games по-ангажиращи с откриване на сблъсък

Включването на ефективно откриване на сблъсък във вашата игра Godot не само гарантира безпроблемно взаимодействие между героите и околната среда, но също така отваря възможности за творческа игра механика.

Независимо дали става дума за платформинг предизвикателства, решаване на пъзели или бойни сценарии, откриването на сблъсък е в основата на ангажираността на играча. Като добавите откриване на сблъсък, можете да създадете игра, която завладява играчите със своите плавни и динамични взаимодействия.