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