2015-07-13 5 views
1

В принципе, я пытаюсь оптимизировать игру для Unity для мобильных устройств. Поэтому крайне важно сохранить использование ЦП. Поскольку это сложная игра, многие сценарии ссылаются друг на друга (и их GameObjects). В настоящее время я использую GameObject.FindGameObjectWithTag(Tag tag) для ссылки на другие GameObjects, Components и Scripts. Я также знаю, что это можно сделать с помощью общедоступных переменных, используя перетаскивание в редакторе. Но поскольку я знаю, какой GameObject будет сброшен на каждый уровень, я нашел первый вариант, который будет проще использовать, поскольку перетаскивание и перетаскивание приводило к ошибкам много раз и было утомительно использовать. Однако это не будет проблемой, и я чувствую, что производительность того или другого перевешивает эти падения. Мне было интересно, есть ли разница в показателях производительности для этих двух подходов, и какой из них лучше подходит для высокопроизводительного, мобильного, аспекта.Производительность FindGameObjectWithTag (тег тега) В сравнении с использованием общедоступных переменных для GameObjects в Unity

+1

Лучше всего просто проверить его. Я знаю, что это посредственная «сделай это сама!». совет, но вы получите самую надежную и точную информацию для своего конкретного сценария, если вы проверите свой собственный код против своего (другого) кода. –

+1

@ DanielHoffmann-Mitscherling На самом деле это то, что я сделал. Сначала у меня был подход перетаскивания, но после того, как код стал очень грязным с большим количеством ненужных (по-моему) общественных переменных, я решил использовать опцию FindGameObject. Тем не менее, я не знаю, если я просто параноик или нет, потому что есть небольшое изменение от одного к другому. Мне было просто любопытно, если бы был «правильный» ответ, если хотите. –

+1

Benchmark. Введите несколько циклов с помощью FindWithTag и другого метода. Посмотрите, что быстрее. –

ответ

2

В моем опыте лучше всего создать общедоступную переменную, если она не назначена, когда вам это нужно, используйте свой метод FindGameObjectWithTag или, тем не менее, вы его нашли раньше, сохраните его в этой общедоступной переменной, чтобы у вас было только чтобы выполнить поиск один раз. Пока вы не делаете FindGameObjectWithTag в каждом кадре, поиск не должен быть слишком плохим.

+0

На самом деле причиной падения кадра в моем случае был FindGameObjectWithTag внутри Update. Я думал, что я кешировал переменные, но все же были некоторые случайные случаи. Это позволило повысить частоту кадров почти на 30-40 кадров в секунду. Благодаря! –