방법1
-
플레이 모드에 진입하지 않고 게임 뷰에서 쉐이더 애니메이션을 확인하고 싶을 때 사용한다.
-
아무 게임오브젝트나 붙잡고
Dirty
로 만들어주면 게임 뷰가 업데이트 된다.
1
EditorUtility.SetDirty(GameObject.FindObjectOfType<Transform>());
- 다음과 같은
Repaint
메소드들은 통하지 않는다.
1
2
3
4
5
6
EditorWindow focused = EditorWindow.focusedWindow;
focused.Repaint();
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
SceneView.RepaintAll();
if (GUI.changed) EditorUtility.SetDirty(focused);
HandleUtility.Repaint(); // ERROR
방법 2
- 유니티 에디터 상단의
Toolbar
는 언제나 그려지므로, 이 녀석을 찾아Repaint()
해주면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Reflection;
using System;
public class GameViewUpdater : MonoBehaviour
{
[InitializeOnLoadMethod]
private static void InitOnLoad()
{
if (Initialize())
{
EditorApplication.update -= EditorUpdate;
EditorApplication.update += EditorUpdate;
}
}
private static Type toolbarType;
private static MethodInfo miRepaintToolBar;
private static bool Initialize()
{
toolbarType = typeof(Editor).Assembly.GetType("UnityEditor.Toolbar");
if (toolbarType == null) return false;
miRepaintToolBar = toolbarType.GetMethod("RepaintToolbar", BindingFlags.NonPublic | BindingFlags.Static);
if (miRepaintToolBar == null) return false;
return true;
}
private static void EditorUpdate()
{
if(Application.isPlaying == false)
miRepaintToolBar.Invoke(null, null);
}
}
#endif