Skip to content

(FixCollisions) Решение всех коллизий в сцене #4

@vasthecat

Description

@vasthecat

Эта функция находит и решает все коллизии нашего игрового мира. Делает она это, попарно перебирая все объекты.

Сначала пройдёмся в цикле по всем объектам сцены (scene). Это можно очень удобно сделать сделать с помощью цикла for-each, который появился в С++11: for (Object &obj1 : scene). Для каждого объекта проверим, что он подчиняется физическим законам нашего игрового мира. Для этого у него должен быть коллайдер (obj1.collider.enabled) - это некий прямоугольник, описывающий физические границы объекта. Кроме того, этот коллайдер должен быть динамическим (ColliderType::DYNAMIC), то есть объект может двигаться сам или под воздействием внешних сил, это можно проверить, используя метод of_type для obj.collider.

Если наш объект удовлетворяет условиям, описанным выше, точно так же переберём все объекты сцены в качестве второго объекта, коллизию с которым и будем проверять. Убедимся в следующих вещах:

  • obj1 != obj2. Объект не может столкнуться сам с собой.
  • У obj2 включён компонент коллайдер.
  • У коллайдера obj2 тип DYNAMIC или STATIC.

И вот теперь, мы точно можем быть уверены, что obj1 и obj2 могут устроить коллизию, которую нужно будет устранить. Для этого воспользуемся функцией CheckCollision, которая вернёт коллизию, и останется только вызвать SolveCollision, которая решит коллизию.

Зависит от

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions