Unity – 編輯器擴展

前言

對於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("調試/查看版本資訊")]  static void PrintSomething()  {      // 注意:僅有靜態函數才可使用該屬性      Debug.Log("當前Unity版本:" + Application.unityVersion);    }  

參考