Unity3D Какой способ сделать столкновение 2D быстрее? - PullRequest
3 голосов
/ 31 августа 2011

Я играю в 2D игру, где враги будут стрелять в моего игрока.Существует два способа столкновения пуль:

  1. Добавление коллайдеров к пулям.Добавить жесткое тело к игроку.Используйте метод OnCollision () для обнаружения столкновений.
  2. Используйте Vector3.Distance () для проверки расстояния каждой пули между игроком и пулями, если оно меньше заданного значения, тогда мой игрок получает удар.

Вопрос в том, какой метод будет иметь лучшую производительность (меньше вычислений)?

Ответы [ 3 ]

3 голосов
/ 06 сентября 2011

Короче, способ 1, не буду об этом.

Я предполагаю, что вы хотите иметь много игроков (скажем, N) и много пуль (скажем, M). Метод 2 должен проверить все пули против всех игроков, это выполняет ваш тест расстояния N * M раз. С другой стороны, вы можете передать, что физический движок оптимизирует тестирование, используя методы пространственного разделения (Тестирование только на «близких» объектах).

Но имейте в виду, что правильный метод, который нужно использовать, также зависит от скорости вашей пули, в то время как использование коллайдера или проверка расстояния в порядке с довольно медленной пулей (т. Е. С металлическими пулями), у вас будут проблемы с быстрая пуля (т. е. быстрая, как настоящая пуля), два возможных решения - немного поиграть с «Настройки проекта» -> «Физика» или просто сделать Physcis.Raycast (), чтобы получить объект, с которым пуля мгновенно воздействует.

1 голос
/ 31 августа 2011

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

Также эта статья может помочь: http://technology.blurst.com/unity-physics-trigger-collider-examples/

0 голосов
/ 31 августа 2011

По своему опыту я бы сказал, что обнаруживать коллайдер быстрее и лучше, в любом случае вы используете физику единства и добавляете метод коллайдера в свой скрипт, это не снижает производительность

...