前言:對編輯器拓展與開發可以節省很多時間,提高開發效率,比如技能編輯器,關卡編輯器這種。當然這只是編輯器開發的一些典型應用,它能做不止這些。學習完這個之后,我們可以開發項目需要的工具。我本意在編輯器里為新項目使用的一個開源框架編寫使用文檔、項目文檔。
編輯器開發與拓展,unity給我們提供了很多類,用來實現編輯器的開發。下面簡單介紹一下,實際上也就幾個類,簡單理解就是
- ??UI層??:GUILayout/EditorGUILayout區別點擊鏈接跳轉了解一下就行)
- 數據層??:SerializedObject/SerializedProperty
- 交互層??:Handles
- 容器層??:Editor/EditorWindow
- 擴展層??:PropertyDrawer
- 輔助層??:Undo/EditorUtility
層級 | 核心類 | 職責描述 | 補充說明 |
---|---|---|---|
數據層 | SerializedObject SerializedProperty | 安全訪問序列化數據 ? 多對象編輯支持 ? 臟數據標記 ? 撤銷操作集成 | 編輯器與游戲對象間的數據橋梁,確保修改符合序列化規則 |
交互層 | Handles | 3D場景交互控制 ? 場景視圖控件繪制 ? Gizmo操作 ? 3D輸入事件處理 | Unity場景編輯的直接操作接口,提供可視化編輯能力 |
容器層 | Editor EditorWindow | UI容器管理 ? Inspector面板容器 ? 工具窗口框架 ? 生命周期控制 | 編輯器擴展的基礎容器,分別用于組件面板和獨立工具窗口 |
擴展層 | PropertyDrawer | 屬性定制渲染 ? 數據類型可視化擴展 ? 自定義屬性布局 ? 渲染邏輯封裝 | 針對特定數據類型(枚舉/結構體)的渲染擴展點 |
輔助層 | Undo EditorUtility | 開發輔助工具 ? 操作歷史管理 ? 進度條/彈窗控制 ? 對象狀態管理 | 編輯器工作流的效率工具集,提升開發體驗和操作安全性 |
類名 | 核心職責 | 詳細說明 |
---|---|---|
GUILayout 與 EditorGUILayout | UI 控件渲染 | 負責 UI 控件的繪制和布局管理: ? GUILayout:基礎 UI 布局,適用于運行時和編輯器 ? EditorGUILayout:編輯器專用 UI,支持序列化屬性 兩者區別詳見正文 |
SerializedObject | 數據安全管理 | 提供對序列化數據的安全訪問: ? 獲取 / 修改屬性值 ? 支持多對象編輯 ? 自動處理臟數據標記 |
Undo | 操作歷史管理 | 實現撤銷 / 重做功能: ? 記錄對象修改歷史 ? 支持多步撤銷 ? 集成 Unity 編輯菜單 |
EditorUtility | 工具輔助 | 提供實用編輯器服務: ? 進度條顯示(DisplayProgressBar) ? 對話框(DisplayDialog) ? 對象臟標記(SetDirty) |
Handles | 3D 場景交互 | Scene 視圖專用控件: ? 創建移動 / 旋轉 / 縮放手柄 ? 繪制自定義 Gizmo ? 3D 輔助線繪制 |
EditorWindow | 窗口容器 | 創建自定義工具窗口: ? 窗口生命周期管理 ? 面板布局控制 ? 菜單欄集成(MenuItem 屬性) |
PropertyDrawer | 屬性定制顯示 | 特殊數據類型渲染優化: ? 枚舉可視化 ? 結構體自定義布局 ? 數據驗證(范圍 / 格式檢查) |
Editor | Inspector 定制 | 自定義組件檢視面板: ? 重寫 OnInspectorGUI() ? 使用 OnSceneGUI() 添加場景交互 |