Откривање судара утиче на већину делова ваше игре, од тога како ваш играч стоји на платформи до тога како уништава непријатеље.

Откривање судара је један од критичних аспеката развоја игре, који значајно утиче на искуство играча. Прецизна детекција судара обезбеђује да ликови игре беспрекорно комуницирају са својим окружењем, стварајући осећај уроњености и реализма.

Годот, популарни мотор за игре отвореног кода, пружа моћне алате за имплементацију ефикасне детекције судара, што резултира глатком и привлачном игром.

Подешавање игре Годо

Пре него што почнете, направите једноставну 2Д платформер игру у Годоту 4. Почните тако што ћете поставити сцену игре са ликом играча и платформама.

Код који се користи у овом чланку доступан је у овом ГитХуб спремиште и бесплатан је за коришћење под МИТ лиценцом.

Направите нову сцену и додајте а ЦхарацтерБоди2Д чвор као коренски чвор. Додајте а Сприте2Д чвор као дете ЦхарацтерБоди2Д да визуелно представи карактер играча.

Следећи, додати покрет играчу карактер користећи ГДСцрипт:

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)

На крају, додајте платформе сцени користећи СтатицБоди2Д чворова да довршите основно подешавање.

Различити облици судара

Годот пружа разне облике судара који служе за различите типове објеката игре. Ови облици судара помажу да се прецизно дефинише област у којој се детекција судара одвија.

Пре него што зароните у различите облике судара, важно је напоменути да један можете причврстити директно на лик играча да бисте дефинисали његову област судара. Ово вам омогућава да контролишете прецизан регион да бисте открили колизију.

Кружни облик судара

Облик судара круга је посебно користан за ликове који треба да раде радијално са околином. Овај облик можете користити за ликове са кружним или сферним хитбоксом. Да бисте свом лику играча додали облик судара круга:

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

Одабиром одговарајућег облика судара и причвршћивањем на карактер играча, можете прецизно детектују сударе унутар назначеног подручја, повећавајући тачност интеракције са игром свет.

Детецтинг Цоллисионс

Откривање судара између објеката је од суштинског значаја за имплементацију интеракција и механике играња. У Годоту то можете постићи помоћу уграђеног механизма физике.

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

Испод је излаз:

Сигнали судара и маске судара

Годот пружа сигнале судара и маске судара као моћне алате за додавање софистицираности вашој игри.

Сигнали судара

Сигнали судара су догађаји које физички мотор покреће када дође до судара. Ови сигнали обезбеђују начин да објекти комуницирају једни са другима и реагују на сударе. У Годоту, можете се повезати са сигналима колизије да бисте извршили прилагођену логику када се догоде одређени догађаји колизије.

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

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

У овом примеру, боди_ентед сигнал се емитује када се лик играча судари са другим физичким телом. Повезивањем овог сигнала са _он_боди_ентеред функција, можете одговорити на догађај колизије. Ако се сударајуће тело налази у колекционарски група, можете репродукујте звучни ефекат без ауторских права.

Цоллисион Маскс

Маске колизије вам омогућавају да контролишете који слојеви колизије могу да комуницирају једни са другима. Сваки слој колизије одговара биту у битмаску. Додељивањем слојева судара и маски објектима, можете фино подесити који се објекти сударају један са другим и оптимизовати перформансе.

На пример, замислите да имате непријатеље и метке у игри. Желите да се непријатељи сударају са платформама, али не једни са другима. Такође желите да се меци сударе са непријатељима, али не и са платформама. Ево како то можете постићи користећи маске за судар:

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

Селективним омогућавањем или онемогућавањем маски колизије, контролишете који објекти могу да се сударе један са другим, што резултира тачним и ефикасним интеракцијама колизије.

Најбоље праксе за откривање судара

Да бисте обезбедили глатку игру и ефикасно откривање судара, размотрите ове најбоље праксе.

Користите једноставне облике

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

Лаиер Цоллисион Маскс

Годот вам омогућава да дефинишете слојеве и маске колизије. Користите их да контролишете који се објекти сударају једни са другима, оптимизујући перформансе.

На пример, у игрици платформер, тхе играч може скочити на платформе и клизи дуж зидова. Одговарајућим подешавањем слојева и маски колизије, можете постићи различита понашања.

Цоллисион Гроупс

Групирајте објекте са сличним својствима колизије за лакше управљање и ефикасно откривање колизије.

Боундинг Бокес

За оптимизацију перформанси, користите граничне оквире да брзо проверите да ли су објекти у близини пре него што извршите прецизну детекцију судара.

Користите кинематичке упите

Годот обезбеђује кинематичке упите за обављање провере колизије без стварног померања објекта. Ово може бити корисно за предвиђање судара пре него што се догоде.

Учините Годот игре привлачнијим са детекцијом судара

Укључивање ефикасне детекције судара у вашу игру Годот не само да обезбеђује беспрекорну интеракцију између ликова и окружења, али такође отвара могућности за креативну игру механика.

Било да се ради о изазовима платформе, решавању загонетки или борбеним сценаријима, откривање судара је у основи ангажовања играча. Додавањем детекције судара, можете креирати игру која плени играче својим глатким и динамичним интеракцијама.