Страница 1 из 1

Время в шейдерах в редакторе

СообщениеДобавлено: 05 сен 2014, 15:59
DbIMok
В папку Editor копируем такой скрипт
Синтаксис:
Используется csharp
using System;
using UnityEditor;
using UnityEngine;

public class ShaderTimeUpdate : EditorWindow {

        private static float time;
        private static Vector4 vTime;
        private EditorApplication.CallbackFunction s_backgroundUpdateCB;

        public void BackgroundUpdateFunc() {
                if (!EditorApplication.isPlaying || EditorApplication.isPaused) {
                        time = (float)EditorApplication.timeSinceStartup;
                        vTime = new Vector4(time * 0.05f, time, time * 2, time * 3);
                        Shader.SetGlobalVector("_unityTime", vTime);
                        UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
                }
        }

        [MenuItem("Window/Background Updater")]
        public static void Launch() {
                EditorWindow window = GetWindow(typeof(ShaderTimeUpdate));
                window.Show();
        }

        void OnEnable() {
                s_backgroundUpdateCB = new EditorApplication.CallbackFunction(BackgroundUpdateFunc);
                EditorApplication.update += s_backgroundUpdateCB;
        }

        void OnDisable() {
                EditorApplication.update -= s_backgroundUpdateCB;
        }

}

Окошко редактора для управления временем "жизни" скрипта. И так, теперь мы изменяем в шейдере(ах) переменную _unityTime. В шейдере, где уже используется стандартная _Time дописываем
float4 _unityTime;
...
func(_Time + _unityTime);
В runtime "работает" _Time, в Editor'е _unityTime.

Re: Время в шейдерах в редакторе

СообщениеДобавлено: 05 сен 2014, 16:44
waruiyume
Так, это, вроде, уже есть, правда, оно не обновляет вкладку game.