Найти в Дзене
Stronghold of gamedev

Игры изнутри : коллайдеры и столкновения

Оглавление

Сразу после попадания в игровой движок любой рисунок или модель всё еще остаются простой графикой, с ней можно взаимодействовать лишь напрямую или по средствам ссылок.

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

Как работают столкновения, что такое триггер - зоны и где используется (спойлер : везде) на конкретных примерах в этой статье.

Физические границы и столкновения

Движок изначально содержит различные настраиваемые примитивы : куб, сфера, капсула и например колесико, но так же может генерировать геометрию коллайдера на основе модели.

С кубом всё понятно : отрегулировать, повесить на ящик и всё чудно, но что делают с игровыми персонажами? Генерируют коллайдер?

Ни в коем случае! Коллайдер как и 3д модель имеет так же свою геометрию, только он не визуализируется. Негласным стандартом персонажа - голыша является геометрия в 10 тысяч полигонов, а это очень тяжело для коллайдера и может привести к неправильной работе.

Развешивать на персонажей принято капсульные коллайдеры - они настраиваются в высоту и в ширину, в отличии от сферы закруглены лишь верх и низ, что позволяет карабкаться по наклонным поверхностям и не иметь невидимое пузо :

Персонаж с капсульным коллайдерам бегает по кубам с кубическими коллайдерами
Персонаж с капсульным коллайдерам бегает по кубам с кубическими коллайдерами

Но этот коллайдер олицетворяет полный объект "Игрок" и ответственен за перемещения и столкновения во время него, однако могут быть и другие коллайдеры.

Соседний шаблон-испытатель содержит куда больше коллайдеров - на каждую "кость". Кости напомню отвечают за анимацию и если отключить контроллер анимации, то подверженные физике части тела с коллайдерами рухнут, это называется рэгдолл или тряпичная кукла :

-3

Без коллайдеров физику можно лишь симулировать костылями ибо столкновения будет определять кратно сложнее. Из-за неправильно настроенных коллайдеров части тела могли бы проваливаться сквозь.
Так же в каком-нибудь Counter Strike они дополняют картину и служат хит-боксами, регулирующими урон попадания в зависимости от части тела.

Невидимые зоны - триггеры

Можно создать объект-пустышку и повесить на него коллайдер с галочкой "триггер", так он станет неосязаемым, но будет отслеживать кто нарушает его границы. Хороший пример тот же Counter Strike :

-4

На базе каждой из команд объект-пустышка с триггером и скриптом, который определяет команду находящегося внутри игрока и предоставляет доступ в магазин. Такая же зона у места закладки бомбы, или, например, на базе стражей порядка, которая сразу на входе в неё спасает заложников.

Надеюсь вам нравится демонстрация на реальном примере, ибо я покажу 3 основных метода работы триггера именно в своей "игре", но для начала создам и настрою пустышку :

Пустышка без триггера
Пустышка без триггера

Существует 3 основных метода : вход в триггер, нахождение в триггере, выход из триггера.
Вход в триггер может означать например смерть, если этот триггер расположен близ дна пропасти.
Нахождение в триггере может привлечь взгляды ближайших НПС, либо та же закупка.
Выход как и вход, только наоборот : сбросить погоню на выходе из зоны преступления например.

А теперь демка :

-6

А так выглядит кусок кода :

-7

Соседние статьи с канала :
Как гений прошел GTA Vice City за 8 минут
Игры изнутри : циклы обработки данных и падение производительности
Дневник разработки игры, на которой все было показано