2016-08-07 1 views
0

Я использую raycast для обнаружения близлежащих объектов, и я должен знать, ударил ли raycast препятствие или другой автомобиль. Я вижу два способа сделать это, но я не знаю, какой из них лучше (более оптимизирован). Первый способ состоит в том, чтобы иметь два слоя для препятствий и автомобилей, установить их как в качестве маски слоя для raycast, так и после проверки попадания на какой слой был объектом. Другой способ - иметь их обоих на одном уровне и делать raycast для одной маски слоя, но тогда мне нужно будет проверить тег.Как проверить цель raycast: gameObject.layer или gameObject.tag?

ответ

0

Я запустил два теста, один для каждого метода. Лучи были отлиты из скручивающего объекта на другие статические и нестатические объекты, каждый тест выполнялся на одной и той же настройке качества, поэтому я считаю, что тест вполне заслуживает доверия. Я измерил, через какое время единица будет выдавать 30 000 кадров. Для проверки слоев потребовалось 321 с и для проверки тегов 320. Я не думаю, что есть какая-то реальная разница.

1

Я бы сказал, чтобы использовать теги для простоты, но я не знаю, какой из них быстрее. В моих предыдущих проектах я использовал только теги, и я бы назвал эту функцию порядка 450 раз за кадр, и я не заметил потери производительности (это было как на моем компьютере с высоким уровнем, так и в ужасном школьном компьютере).

-Mitchell

+0

Хорошо, я строю игру для мобильных устройств, поэтому разница в производительности может быть более заметной. Я, вероятно, сделаю некоторые тесты, как вы. –

+0

@faken Да, если вы собираетесь сделать тест, я настоятельно рекомендую изучить Unity Profiler [link] (https://docs.unity3d.com/Manual/Profiler.html) и класс секундомера C# [link] (https: //msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch(v=vs.110).aspx). –

1

Это не о том, что происходит быстрее, но о том, какова их цель.

Что нужно сделать, это проверить наличие столкновения слоя, а затем, если у вас есть разные объекты под одним слоем, отметьте тег. Обратите внимание, что параметр raycast называется слоем.

Слой - это просто целое число, и я бы предположил, что тег использует хеш-таблицу, поэтому и то и другое довольно быстро.

Вывод: вы не всегда должны думать об эффективности, но сначала с точки зрения цели.

Смежные вопросы