diff --git a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/Editor/OptitrackStreamingClientEditor.cs b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/Editor/OptitrackStreamingClientEditor.cs index 6a8b4e8c6..9ea667607 100644 --- a/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/Editor/OptitrackStreamingClientEditor.cs +++ b/Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/Editor/OptitrackStreamingClientEditor.cs @@ -1,81 +1,148 @@ using UnityEngine; using UnityEditor; +using UnityEngine.UIElements; +using UnityEditor.UIElements; [CustomEditor(typeof(OptitrackStreamingClient))] public class OptitrackStreamingClientEditor : Editor { - public override void OnInspectorGUI() + private const string UxmlPath = "Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/Editor/UXML/OptitrackStreamingClientEditor.uxml"; + private const string UssPath = "Assets/External/OptiTrack Unity Plugin/OptiTrack/Scripts/Editor/UXML/OptitrackStreamingClientEditor.uss"; + private const string CommonUssPath = "Assets/Scripts/Streamingle/StreamingleControl/Editor/UXML/StreamingleCommon.uss"; + + private OptitrackStreamingClient client; + private VisualElement statusDot; + private Label statusText; + private VisualElement runtimeOffline; + private VisualElement runtimeOnline; + private VisualElement runtimeInfo; + + public override VisualElement CreateInspectorGUI() { - // 기본 Inspector 그리기 - DrawDefaultInspector(); - - EditorGUILayout.Space(); - EditorGUILayout.LabelField("OptiTrack 연결 제어", EditorStyles.boldLabel); - - OptitrackStreamingClient client = (OptitrackStreamingClient)target; - - // 연결 상태 표시 - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.LabelField("연결 상태:", GUILayout.Width(80)); - - string connectionStatus = Application.isPlaying ? client.GetConnectionStatus() : "게임 실행 중이 아님"; - Color originalColor = GUI.color; - - if (Application.isPlaying) + client = (OptitrackStreamingClient)target; + var root = new VisualElement(); + + // Load stylesheets + var commonUss = AssetDatabase.LoadAssetAtPath(CommonUssPath); + if (commonUss != null) root.styleSheets.Add(commonUss); + + var uss = AssetDatabase.LoadAssetAtPath(UssPath); + if (uss != null) root.styleSheets.Add(uss); + + // Load UXML + var uxml = AssetDatabase.LoadAssetAtPath(UxmlPath); + if (uxml != null) uxml.CloneTree(root); + + // Cache references + statusDot = root.Q("statusDot"); + statusText = root.Q