Comments 7
Что за ecs-фреймворк использовался? Ну и не обязательно перекладывать managed-арреи в native-арреи, можно через ансейф сказать, что вот этот кусок managed-аррея является native-арреем на основе кода из вот этого репа: https://github.com/stella3d/SharedArray
А когда-то этот самый Dyna Blaster работал на 386SX в одном потоке на двух (ЕМНИП, если вообще не на одном) мегах оперативки, пусть и не так быстро. Есть ещё куда стремиться :)
В данном случае для обработки столкновений с уровнем можно использовать двумерный массив, а движущиеся объекты сортировать по (x, y)
и находить потенциальные пересечения практически одним проходом (алгоритм sweep and prune). Если я правильно понимаю, то столкновения можно проверять только для пересечения персонажа с врагами и бонусами, и расставлять флаг взрыва на сетке чтобы убивать всех наступивших на этот флаг.
Чтобы не быть голословным пример из моей игры

Красные квадраты - обозначают твердые части уровня, в игре это просто массив булевых значений. Столкновение проверяется через обращение к элементу массива (в зависимости от размера объекта может быть и больше обращений, например для босса - 8), если значение true
- значит есть столкновение и нужно рассчитать импульс для выталкивания. Выталкивание считается исходя из того, что границы элементов сетки всегда целые числа, поэтому можно просто отбрасывать целую часть AABB и получить смещение. (или 1 - смещение
для левой границы).
PS: красные каракули внизу - это эффекты.
Оптимизация вставки в R-дереве в рамках Unity проекта