1. Главная
  2. Геймдизайн
  3. Игровая коллизия: расчет столкновения объектов

Игровая коллизия: расчет столкновения объектов

Коллизия (от англ. Collision — «столкновение») — соударение либо взаимное пересечение границ или плоскостей двух (или более) объектов. Коллизия в играх вычисляется с помощью хитбокса. Хитбокс — это невидимая объемная геометрическая фигура, в которую помещают героя игры. Дальше проверяют пересечение этого хитбокса с другими объектами, в результате чего герой будет отталкиваться от этих объектов.

Хитбоксы (hitboxes) игровых персонажей

Хитбоксы персонажей в виде параллелепипеда

Хитбоксы игрового персонажа

Персонажа можно поместить в несколько хитбоксов, чтобы его столкновение с другими игровыми элементами выглядело естественно

Зачем нужна коллизия в играх? 

  • для корректного расчета рикошета пуль от стен;
  • для анализа бега футболистов, столкновения друг с другом, движения и отскока мяча без проваливания в текстуру поля в соответствующих симуляторах;
  • для определения характеристики объекта — мягкости/твердости или упругости;
  • для расчета импульса или инерции сталкивающихся гоночных автомобилей;
  • для реалистичного разрушения 2D или 3D моделей.

Как найти коллизии 2D объектов? 

Наиболее простая задача — обнаружение коллизий у 2D объектов. Например, взаимное пересечение двух прямоугольников проверяется поэтапно с помощью следующих шагов:

  1. Накладывание ограничительной рамки, точно повторяющей форму объектов.
  2. Проверка по оси Х — сравниваем ширины объектов.
  3. Если координаты правой стороны левого объекта больше или равны координатам левой стороны правого объекта, переходим к следующему шагу.
  4. Аналогично сравниваем высоты ограничительных рамок объектов по оси Y.
  5. Если наблюдаются перехлесты и выполняются условия одновременно для осей X и Y, то математический движок определяет перекрытие одного объекта другим.
  6. Если хотя бы одно условие не выполняется, то коллизия не фиксируется.

Нюансы расчета коллизий 2D объектов

Если координаты сторон по одной из осей совпадают, а по другой наблюдается перехлест, то элементы касаются или соударяются. 

Если в играх нужно рассчитать взаимодействие 2D объектов достаточно сложной формы, то их проекции разбиваются на множество связанных между собой ограничительных рамок разных размеров. Чем точнее эти ограничительные рамки повторяют форму объектов, тем лучше расчет коллизий.

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

Коллизия 3D объектов

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

Обработка коллизий в современных игровых редакторах

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

В некоторых редакторах (например, в Solar 2D) обнаружение коллизий осуществляется в несколько простых шагов:

  1. Программист активирует модуль расчета физического движка.
  2. Задается размер ограничительной рамки и упругость объекта.
  3. Оговаривается неподвижность объекта (его жесткая фиксация в определенном месте) либо динамичность (влияние сил гравитации, импульсов от других объектов).

Далее физический движок самостоятельно рассчитывает все взаимодействия и коллизии.

Меню