Я использую raycast для обнаружения близлежащих объектов, и я должен знать, ударил ли raycast препятствие или другой автомобиль. Я вижу два способа сделать это, но я не знаю, какой из них лучше (более оптимизирован). Первый способ состоит в том, чтобы иметь два слоя для препятствий и автомобилей, установить их как в качестве маски слоя для raycast, так и после проверки попадания на какой слой был объектом. Другой способ - иметь их обоих на одном уровне и делать raycast для одной маски слоя, но тогда мне нужно будет проверить тег.Как проверить цель raycast: gameObject.layer или gameObject.tag?
ответ
Я запустил два теста, один для каждого метода. Лучи были отлиты из скручивающего объекта на другие статические и нестатические объекты, каждый тест выполнялся на одной и той же настройке качества, поэтому я считаю, что тест вполне заслуживает доверия. Я измерил, через какое время единица будет выдавать 30 000 кадров. Для проверки слоев потребовалось 321 с и для проверки тегов 320. Я не думаю, что есть какая-то реальная разница.
Я бы сказал, чтобы использовать теги для простоты, но я не знаю, какой из них быстрее. В моих предыдущих проектах я использовал только теги, и я бы назвал эту функцию порядка 450 раз за кадр, и я не заметил потери производительности (это было как на моем компьютере с высоким уровнем, так и в ужасном школьном компьютере).
-Mitchell
Это не о том, что происходит быстрее, но о том, какова их цель.
Что нужно сделать, это проверить наличие столкновения слоя, а затем, если у вас есть разные объекты под одним слоем, отметьте тег. Обратите внимание, что параметр raycast называется слоем.
Слой - это просто целое число, и я бы предположил, что тег использует хеш-таблицу, поэтому и то и другое довольно быстро.
Вывод: вы не всегда должны думать об эффективности, но сначала с точки зрения цели.
- 1. Использование GameObject.Tag
- 2. Как проверить угол между raycast и поверхностью?
- 3. Единство raycast, на raycast оставить, как? C#
- 4. Как проверить UIButton есть цель?
- 5. Swift единый raycast эквивалент
- 6. Понимание метода raycast
- 7. Как проверить, существует ли цель или нет до ее вызова?
- 8. Цель C: Как проверить на утечки или ошибки плохого доступа
- 9. Как проверить, была ли добавлена цель или нет?
- 10. box2dweb raycast
- 11. Как я могу проверить источник и цель?
- 12. Как проверить, является ли цель пути каталогом?
- 13. Как Raycast от произвольной точки
- 14. Как raycast с заданным углом?
- 15. Как изменить направление вперед Raycast
- 16. RayCast пересекается по многофайлу
- 17. Алгоритм RayCast в Bukkit
- 18. Smooth raycast positioning
- 19. Three.js raycast THREE.Object3D
- 20. 2 Raycast вызывает задержку
- 21. Raycast не ударил объект
- 22. Raycast не обнаруживает объект
- 23. Raycast без использования коллайдера
- 24. Raycast вызывает NullReferenceException ошибку
- 25. Raycast в направлении угла
- 26. Raycast со смещением
- 27. Какао или Цель-C?
- 28. MD5 Цель или использование
- 29. Проверить цель развертывания iOS для статической библиотеки
- 30. Физика RayCast Перемещение объекта к камере или происхождения
Хорошо, я строю игру для мобильных устройств, поэтому разница в производительности может быть более заметной. Я, вероятно, сделаю некоторые тесты, как вы. –
@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). –