Unreal의 G키로 ui off하는거 탐나서 하나 만들었습니다.

UNITY_EDITOR를 통해서 빌드할 때는 빠지도록 코드가 짜져 있습니다.

 

SceneView상태에서 화면에 마우스를 잡고 G로 토글이 가능합니다.

SceneViewGameModeToggle.cs
0.00MB

#if UNITY_EDITOR

using UnityEditor;
using UnityEngine;

[InitializeOnLoad]
public static class SceneViewGameModeToggle
{
    static bool isGameMode = false;

    static SceneViewGameModeToggle()
    {
        SceneView.duringSceneGui += OnSceneGUI;
    }

    static void OnSceneGUI(SceneView sceneView)
    {
        Event e = Event.current;

        if (e.type == EventType.KeyDown && e.keyCode == KeyCode.G)
        {
            ToggleGameMode(sceneView);
            e.Use(); // 이벤트 소비
        }
    }

    static void ToggleGameMode(SceneView sceneView)
    {
        isGameMode = !isGameMode;

        // Gizmo on/off
        sceneView.drawGizmos = !isGameMode;

        // Selection outline / wireframe
        Tools.hidden = isGameMode;

        // Scene 아이콘 (라이트, 카메라 등)
        AnnotationUtility.SetIconState(isGameMode ? 0 : 1);

        SceneView.RepaintAll();
    }
}

/// <summary>
/// 내부 API (아이콘 표시 제어)
/// </summary>
static class AnnotationUtility
{
    static System.Type annotationUtilityType;
    static System.Reflection.MethodInfo setIconEnabledMethod;

    static AnnotationUtility()
    {
        annotationUtilityType = typeof(Editor).Assembly.GetType("UnityEditor.AnnotationUtility");
        setIconEnabledMethod = annotationUtilityType.GetMethod(
            "SetIconEnabled",
            System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic
        );
    }

    public static void SetIconState(int enabled)
    {
        var annotations = annotationUtilityType.GetMethod(
            "GetAnnotations",
            System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic
        ).Invoke(null, null) as System.Array;

        foreach (var annotation in annotations)
        {
            var classId = (int)annotation.GetType().GetField("classID").GetValue(annotation);
            var scriptClass = (string)annotation.GetType().GetField("scriptClass").GetValue(annotation);
            setIconEnabledMethod.Invoke(null, new object[] { classId, scriptClass, enabled });
        }
    }
}

#endif

+ Recent posts