Unity3D編輯器的使用及擴展


CustomEditor使用方式

@[CustomEditor(YouScript)]

這個比較常用,用於對對象界面的擴展,比如一個對象的屬性和方法。

1、創建一個ExampleEditor腳本,在類上添加[CustomEditor(typeof(T))]屬性,重寫OnInspectorGUI方法,用於擴展Inspector。

using UnityEditor;
using UnityEngine;
 
[CustomEditor(typeof(Example))]
public class ExampleEditor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        Example _example = target as Example;
        if (GUILayout.Button("執行Example方法"))
        {
            _example.LogError();
        }
        //擴展Inspector
    }
}
View Code

  target就是你所添加的類型T,需要強轉為你需要的類型。其他的做法與OGUI類似。

2、創建Example腳本,繼承MonoBehaviour,用來掛載到Object上。

using UnityEngine;
[ExecuteInEditMode]
public class Example : MonoBehaviour
{
    public void LogError()
    {
        Debug.LogError("執行Example方法");
    }
 
}
View Code

  Example中添加你需要處理的數據,或者函數。這樣掛載Example在GameObject上,Inspector就可以查看和執行相關的函數了。如果你需要在編輯模式上運行周期函數,還可以在Example上添加[ExecuteInEditMode]屬性。

ExecuteInEditMode使用方式

[ExecuteInEditMode]

我們通常書寫的腳本,並不會定義[ExecuteInEditMode]這個Attribute,所以Awake()和Start()都只有在Runtime中才會執行。給腳本添加[ExecuteInEditMode]特性可以在編輯器模式運行,在ExecuteInEditMode下兩個方法的調用順序和區別。

1:在該MonoBehaviour在編輯器中被賦予給GameObject時,Awake和Start方法會被執行。

2:在Play按鈕被按下開始之后,Awake和Start方法將被執行。

3:在Play按鈕被抬起之后,Awake和Start方法將被執行。

4:在打開含有該MonoBehaviour腳本的場景的時候,Awake和Start將被執行。

MenuItem菜單項使用方式

[MenuItem("MenuName")]

MenuItem屬性允許你添加菜單項到主菜單和檢視面板上下文菜單。 

(該屬性把任意靜態函數變為一個菜單命令。僅靜態函數能使用這個MenuItem屬性。)

具體介紹參考:https://blog.csdn.net/qq_33337811/article/details/72852342

AddComponentMenu添加組件菜單項

[AddComponentMenu("")]

在編輯器添加一個用於添加組件的菜單項,將擁有該屬性的腳本添加到選中的物體上。

 

下面來說說相關的類:

Editor

這個類用於擴展一些編輯器全局的功能.且這個類可以和目標對象作用[CustomEditor(MyScript)];在Editor類里,可以重寫OnInspectorGUI(這個用的比較多的)等方法。

EditorWindow

這個類,用於自定義一個窗口,你可以為窗口添加一些按鈕,選項等。比如,如果你想弄一個任務編輯器,用於配置一些數據。那么直接可以使用該類。

它有一個OnSceneUI的事件可以監聽,可以使你實現像自己的編輯器一樣,在Scene中點擊某個物體后,在鼠標位置顯示一個菜單,或者一些操作按鈕。

另外,還有一個比較適用的事件是OnHierarchyChange。當一個對象的父物體被改變,或者被新建的時候,這個事件會被觸發。

EditorApplication主應用程序類

這個類提供了許多變量的訪問,同時提供了Save等方法。比如,你可以新建一個編輯器腳本,在它的update函數里,進行記事,已做定時保存,從而避免不必要的損失。

這個類還提供了新建場景,打開項目等操作。

如果你是在界面下使用Unity3D,可能這個類的意義不大。但如果你是基於U3D的命令行來構建一個一鍵式多平台發布方案,那么這個類的地位就舉足輕重了。

EditorUtility

提供了很多全局函數,並且多半是靜態的。比如,你想彈出一個打開文件的對話框,或者保存文件的對話框。或者你要查看場景樹中的某個對象enable是與否,都可以通過它來訪問。

 

在這些編輯類的具體使用上參考:https://blog.csdn.net/qq_33337811/article/category/6785901

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM