#unity3d #shader #shader-graph
#unity3d #шейдер #шейдер-граф
Вопрос:
У меня есть несколько шейдеров, которые используют временной узел для анимации определенных элементов пользовательского интерфейса для моей мобильной игры. В определенных случаях (которые я не могу воспроизвести) шейдеры будут зависать в определенное время и не будут анимироваться.
Например, шейдер shine может застрять в середине shine.
Некоторые важные моменты, на которые следует обратить внимание:
Time.timeScale
равно 1 — все мои подростки, использующие масштабированное дельта-время, работают правильно- Когда это произойдет, все шейдеры, использующие временной узел в активной сцене, «зависнут во времени»
- Это воспроизводится только на реальных устройствах Android (iOS не тестировалась)
- Все параметры, влияющие на время в указанных шейдерах, являются положительными, допустимыми числами
- Ошибок или предупреждений нет
- Когда я перехожу из сцены главного меню в игровую сцену, временные шейдеры будут работать правильно — когда я вернусь к основной сцене, она снова воспроизведется (очевидно, это что-то особенное)
- Работает на Unity 2019.4.11f1 с URP amp; Shader Graph 7.5.1, но он воспроизводился и в более старых версиях Unity / URP
Пример шейдера — предварительный просмотр на самом деле выглядит точно так же, как проблема, поскольку она появится в игре при замораживании:
Ответ №1:
Для любых потерянных душ, которые натыкаются на эту проблему (хотя я сомневаюсь, что это сделано специально, поскольку это похоже на ошибку).
Проблема в том, что время не обновляется в шейдерах в сценах без камеры. Камера не должна ничего отображать; она просто должна существовать.
Мое главное меню — это чистые элементы пользовательского интерфейса, в нем не было камеры; добавление камеры в сцену устранило проблему.
Важно отметить, что такое поведение происходит только после сборки на устройстве Android; не уверен, воспроизводится ли оно на других платформах.