Unity – 編輯器擴展
- 2020 年 4 月 5 日
- 筆記
前言
對於Unity編輯器的擴展方法眾多,本文從最常用的一些方法入手,例如Inspector腳本欄的擴展、頂菜單欄的擴展等,圖文並茂闡述其完整用法。
本文大部分內容整理自 獨立遊戲開發 – indienova 所著的 Unity使用技巧集合,但僅選取了最常用的一些方法,並在自身項目上加以實現。
項目地址:UnityEditor – SouthBegonia
本文僅供學習交流,如有任何侵權行為立即刪除。
腳本欄的擴展
該部分的擴展方法集中在Inspector中腳本面板,主要體現在程式碼實現腳本欄中可視變數的規範化、便捷化
[Header] 屬性標題
為後續區域程式碼擬訂一個標題,用於區分和概述該區域程式碼含義
[Header("武器")] public int weapon; public int ammunition; public int aurability;

[Tooltip] 屬性提示
實現在Inspector中,滑鼠位於該變數名字上時,提示該變數的描述資訊
[Tooltip("玩家的名字,肯定不再是JOJO對吧")] public string playerName;

[Space] 空行屬性
在Inspector腳本頁面創建空行以隔開上下可視參數
[Space] public int health = 100;

[Range()] 範圍值屬性
使得變數的值僅可在該範圍內修改,並且可以在Inspector頁面呈現滑動修改變數的效果
[Range(0, 1000)] public int exp = 0;
[Foldout] 屬性摺疊
使得多個的變數在Inspector頁面實現集合、可摺疊效果。(註:本方法並非Unity自帶,而是源自項目InspectorFoldoutGroup – PixeyeHQ,如需使用該方法,僅需要將項目的腳本配置到自身unity項目下即可)
[Pixeye.Unity.Foldout("Enemys")] public GameObject a, b, c, d, e;

[SerializeField] 強制序列化
使得private變數在Inspector腳本頁面可見,同時也稱為強制序列化
[SerializeField] private int coins;
[HideInInspector] 隱藏屬性
使得public變數在Inspector頁面不可視,進而實現保護變數
[HideInInspector] public int maxHealth = 100;
[TextArea] 輸入域
對於字數較長的字元串,擴展其在Inspector中的編輯區大小(原本僅能單行,且無法自動換行)
[TextArea] public string gameDescribe = "";

[AddComponentMenu] 添加組件到菜單
寫於類名前,可以將該類直接添加到Add Component菜單中
[AddComponentMenu("Managers/demo1")] public class demo1 : MonoBehaviour { // ... }

OnValidate() 數據檢查
對編輯狀態下、Inspector中輸入的數據進行檢查的函數
private void OnValidate() { if (health < 0) { Debug.LogError("生命值不可為負"); health = 0; } else if (health > 100) { Debug.LogError("生命值不可超過最大值 " + maxHealth); health = 100; } }

[ContextMenu] 上下文菜單
可以為類增加一個上下文彈出菜單,在Inspector頁面對當前腳本右鍵(或者單擊腳本圖標右側三個豎點)即可彈出自定義的上下文菜單
[ContextMenu("顯示當前生命值")] public void PrintHealth() { Debug.Log("Health = " + health); }

菜單欄的擴展
[MenuItem] 菜單欄
在編輯狀態可點擊上方自定義的菜單欄項實現特定功能,即擴展菜單欄項
[MenuItem("調試/查看版本資訊")] static void PrintSomething() { // 注意:僅有靜態函數才可使用該屬性 Debug.Log("當前Unity版本:" + Application.unityVersion); }


