選中物體才能在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展示