Рекомендации по созданию визуальных сценариев сетки для повышения производительности
Обзор
Визуальные скрипты не являются по сути медленными, но они значительно медленнее, чем, например, код C#.
При создании визуальных скриптов в вашей среде рекомендуется использовать их для подключения существующих функций, а не для тяжелого подъема: сделать клей, а не гисти. Самый простой способ убедиться, что визуальные скрипты не влияют на общую производительность вашей среды, чтобы убедиться, что они не делают много в первую очередь.
События скрипта высокой и низкой частоты
Visual Scripting предлагает широкий выбор событий, которые можно использовать для активации потоков визуальных скриптов.
Старайтесь избежать:
В обновлении, в фиксированном обновлении, в конце обновления и аналогичном. Эти события активируются очень часто (часто с той же скоростью, что и кадры отрисовки), и даже если скрипт не делает много, даже просто запуская его, может заметно повлиять на производительность вашей среды, если это происходит во многих местах одновременно.
На триггере остается и при столкновении. Несмотря на то, что эти события активны только в определенных условиях (например, когда физический объект находится внутри тома триггера физики или касания коллайдера), в то время как эти условия даются, они будут запускаться очень часто.
Для этих высокочастотных событий нет прямой предпочтительным вариантом замены. Они не отключены, поэтому их можно использовать, если это абсолютно необходимо, но мы рекомендуем использовать встроенные функциональные возможности, такие как компонент Animator, который можно контролировать визуальными скриптами, или реструктурировать логику скрипта, чтобы быть реактивной, а не активной, например с помощью событий On State Changed .
Если вы не можете избежать этих высокочастотных событий, вы можете уменьшить их влияние, сохранив весь компонент компьютера скрипта неактивным, если он не нужен. Для отключения и включения всего графа скриптов можно использовать | другой визуальный скрипт. Хотя он отключен, ни один из его узлов событий не активируется и не имеет нулевой стоимости среды выполнения.
Это немного опасно для производительности, но иногда необходимо:
- При входе в столкновение и выходе из столкновения. Как правило, эти события активируются только один раз, когда физическое тело касается коллидера, и снова, когда он перестает касаться. Однако иногда физическое тело застряло между двумя коллидерами; в этом случае он может начать дрожи быстро назад и вперед, активируя многие события on Collision в очень быстром последовательности. Вместо этого рекомендуется использовать события on Trigger .
Это нормально использовать в определенных ситуациях:
В интервале можно активировать потоки скриптов в настраиваемых интервалах (например, один раз в секунду), определенных с помощью параметра интервала . Параметр "Задержка" можно использовать для ошеломления выполнения различных событий on Interval с одинаковым интервалом.
Узел Таймера не является событием, но активирует его порт Tick один раз на кадр для длительности таймера после его запуска путем ввода порта запуска . Если таймер не запущен, он имеет нулевое значение среды выполнения.
Старайтесь не использовать эти события для проверки того, изменились ли определенные переменные, свойства или условия, лучше использовать событие On State Changed для прослушивания изменений бездействия.
Это всегда нормально использовать:
При изменении состояния триггеры активируются только в том случае, если любой из входных портов изменит их значение. Для переменных скрипта и свойств компонентов это реализуется очень эффективно таким образом, чтобы нулевая стоимость среды выполнения не изменялось.
При изменении состояния можно также использовать для наблюдения за более сложными входными данными (например, результатами вычисления), которые требуют повторной оценки входных данных один раз на кадр, чтобы определить, изменилось ли оно. Вам потребуется включить параметр "Разрешить опрос" , чтобы включить эту функцию. Пользовательский интерфейс редактирования скрипта сообщит вам об этом и предупредит вас о потенциальном влиянии на производительность. Тем не менее, это по-прежнему будет немного эффективнее, чем скрипт собственной логики опроса с помощью события On Update .
При добавлении и удалении элемента словаря в элементе словаря они работают аналогичным образом и не имеют нулевой стоимости среды выполнения, если ничего не изменится.
При входе и выходе триггера триггера нет потенциальных угроз производительности соответствующих событий on Collision (см. выше).