Unity Scene視圖擴展

選中物體才能在Scene視圖展示

[CustomEditor(typeof(YourMono))]
class YourMonoEditor : Editor {
       private void OnSceneGUI()
        {
            //這裏擴展
        }
}

持久在Scene視圖展示

    [ExecuteInEditMode]//可以非運行模式運行某些生命週期
    public class YourMono : MonoBehaviour{
        [DidReloadScripts]//編譯後運行
        private static void ReloadScripts()
        {
            YourMono mono = FindObjectOfType<YourMono>();
            mono?.Awake();//未運行不會調用Awake,所以主動調用
        }
        private void Awake()
        {
            //EditorApplication.projectChanged += ReFreshData;
            //EditorApplication.hierarchyChanged += ReFreshData;
            //SceneView.onSceneGUIDelegate
            SceneView.duringSceneGui += OnSceneGUI;//視圖UI繪製委託
        }
        private void OnDestroy()
        {
            SceneView.duringSceneGui -= OnSceneGUI;
            //EditorApplication.projectChanged -= ReFreshData;
        }
        //方法一: 持久化Scene展示UI界面
        private void OnSceneGUI(SceneView view)
        {
            GUIStyle style = new GUIStyle() { richText = true };
            Handles.BeginGUI();
            GUILayout.BeginArea(new Rect(0, 0, 128, view.position.height)); // 規定顯示區域爲屏幕大小
            GUILayout.BeginVertical();
            GUILayout.Label(@"<color=blue>視圖界面自定義UI</color>", style);
            GUILayout.EndVertical();
            GUILayout.EndArea();
            Handles.EndGUI();
        }
       //方法二: OnDrawGizmos繪製,但是無法繪製按鈕文本等UI組件
       private void OnDrawGizmos()
        {
            Gizmos.color = Color.magenta;
            //Gizmos.DrawCube(transform.position,Vector3.one);
        }
       private void OnValidate()
        {
            //ReFreshData();
        }
}

將上面腳本掛在任意當前場景的物體上即可實現Scene視圖自定義UI展示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章