Время в шейдерах в редакторе
Добавлено: 05 сен 2014, 15:59
В папку Editor копируем такой скрипт
Окошко редактора для управления временем "жизни" скрипта. И так, теперь мы изменяем в шейдере(ах) переменную _unityTime. В шейдере, где уже используется стандартная _Time дописываем
float4 _unityTime;
...
func(_Time + _unityTime);
В runtime "работает" _Time, в Editor'е _unityTime.
Синтаксис:
Используется 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;
}
}
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.