Сразу после попадания в игровой движок любой рисунок или модель всё еще остаются простой графикой, с ней можно взаимодействовать лишь напрямую или по средствам ссылок.
Одним из первых и важнейших компонентов любого объекта в движке является коллайдер - геометрическая фигура, выполняющая роль оболочки с которой уже может взаимодействовать движок.
Как работают столкновения, что такое триггер - зоны и где используется (спойлер : везде) на конкретных примерах в этой статье.
Физические границы и столкновения
Движок изначально содержит различные настраиваемые примитивы : куб, сфера, капсула и например колесико, но так же может генерировать геометрию коллайдера на основе модели.
С кубом всё понятно : отрегулировать, повесить на ящик и всё чудно, но что делают с игровыми персонажами? Генерируют коллайдер?
Ни в коем случае! Коллайдер как и 3д модель имеет так же свою геометрию, только он не визуализируется. Негласным стандартом персонажа - голыша является геометрия в 10 тысяч полигонов, а это очень тяжело для коллайдера и может привести к неправильной работе.
Развешивать на персонажей принято капсульные коллайдеры - они настраиваются в высоту и в ширину, в отличии от сферы закруглены лишь верх и низ, что позволяет карабкаться по наклонным поверхностям и не иметь невидимое пузо :
Но этот коллайдер олицетворяет полный объект "Игрок" и ответственен за перемещения и столкновения во время него, однако могут быть и другие коллайдеры.
Соседний шаблон-испытатель содержит куда больше коллайдеров - на каждую "кость". Кости напомню отвечают за анимацию и если отключить контроллер анимации, то подверженные физике части тела с коллайдерами рухнут, это называется рэгдолл или тряпичная кукла :
Без коллайдеров физику можно лишь симулировать костылями ибо столкновения будет определять кратно сложнее. Из-за неправильно настроенных коллайдеров части тела могли бы проваливаться сквозь.
Так же в каком-нибудь Counter Strike они дополняют картину и служат хит-боксами, регулирующими урон попадания в зависимости от части тела.
Невидимые зоны - триггеры
Можно создать объект-пустышку и повесить на него коллайдер с галочкой "триггер", так он станет неосязаемым, но будет отслеживать кто нарушает его границы. Хороший пример тот же Counter Strike :
На базе каждой из команд объект-пустышка с триггером и скриптом, который определяет команду находящегося внутри игрока и предоставляет доступ в магазин. Такая же зона у места закладки бомбы, или, например, на базе стражей порядка, которая сразу на входе в неё спасает заложников.
Надеюсь вам нравится демонстрация на реальном примере, ибо я покажу 3 основных метода работы триггера именно в своей "игре", но для начала создам и настрою пустышку :
Существует 3 основных метода : вход в триггер, нахождение в триггере, выход из триггера.
Вход в триггер может означать например смерть, если этот триггер расположен близ дна пропасти.
Нахождение в триггере может привлечь взгляды ближайших НПС, либо та же закупка.
Выход как и вход, только наоборот : сбросить погоню на выходе из зоны преступления например.
А теперь демка :
А так выглядит кусок кода :
Соседние статьи с канала :
Как гений прошел GTA Vice City за 8 минут
Игры изнутри : циклы обработки данных и падение производительности
Дневник разработки игры, на которой все было показано