Posts 유니티 - 게임 뷰를 강제로 업데이트하기
Post
Cancel

유니티 - 게임 뷰를 강제로 업데이트하기

방법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
This post is licensed under CC BY 4.0 by the author.