На разных версиях юнити (на 5 и на старой 4.6) шейдер со скриптом работают по разному.
Есть некий кусок кода вычисляющий матрицу проекции для шейдера (что бы сделать проективную воду и масштабирование)
где gameObjectTransform это геймобъект пустышка внутри иерархии.
Синтаксис:
Используется csharp
Shader.SetGlobalMatrix("_projectiveMatrScale", gameObjectTransform.worldToLocalMatrix * transform.localToWorldMatrix);
Есть кусок шейдера
Синтаксис:
Используется csharp
half2 scaleeUv = -mul(_projectiveMatrScale,v.vertex).xz;
o.uvWave1.xy = scaleeUv * _Wave1_ST.xy + _Wave1_ST.w + time1;
o.uvWave1.xy = scaleeUv * _Wave1_ST.xy + _Wave1_ST.w + time1;
На юнити 5 всё работает корректно.
На юнити 4.6 две проблемы.
Масштабирование относительно родителя перестаёт работать. (то есть если родитель 20 на 20 метров, то в шейдере скейл текстуры остаётся с масштабом 1 на 1).
Так же если gameObjectTransform статичен в пространстве, на юнити 5 двигая меш, uv развёртка остаётся в мировом пространстве, но на юнити 4.6 она двигается вместе с объектом. (Притом если двигать gameObjectTransform, то и развёртка тоже двигается)
Что юнитеки поменяли в юнити5, и почему на старой версии в мировом пространстве перестало работать?