1. 程式人生 > >Unity - 編輯器擴充套件

Unity - 編輯器擴充套件

# 前言 對於Unity編輯器的擴充套件方法眾多,本文從最常用的一些方法入手,例如Inspector指令碼欄的擴充套件、頂選單欄的擴充套件等,圖文並茂闡述其完整用法。 本文大部分內容整理自 [獨立遊戲開發 - indienova](https://indienova.com/u/dev) 所著的 **Unity使用技巧集合**,但僅選取了最常用的一些方法,並在自身專案上加以實現。 專案地址:[UnityEditor - SouthBegonia](https://github.com/SouthBegonia/UnityWorld/tree/master/UnityEditor) 本文僅供學習交流,如有任何侵權行為立即刪除。 ## 指令碼欄的擴充套件 該部分的擴充套件方法集中在Inspector中指令碼面板,主要體現在程式碼實現指令碼欄中可視變數的規範化、便捷化 ### [Header] 屬性標題 為後續區域程式碼擬訂一個標題,用於區分和概述該區域程式碼含義 ``` [Header("武器")] public int weapon; public int ammunition; public int aurability; ``` ![](https://img2020.cnblogs.com/blog/1688704/202004/1688704-20200405151749141-1928331816.png) ### [Tooltip] 屬性提示 實現在Inspector中,滑鼠位於該變數名字上時,提示該變數的描述資訊 ``` [Tooltip("玩家的名字,肯定不再是JOJO對吧")] public string playerName; ``` ![](https://img2020.cnblogs.com/blog/1688704/202004/1688704-20200405151759240-634109056.png) ### [Space] 空行屬性 在Inspector指令碼頁面建立空行以隔開上下可視引數 ``` [Space] public int health = 100; ``` ![](https://img2020.cnblogs.com/blog/1688704/202004/1688704-20200405151806785-1474475001.png) ### [Range()] 範圍值屬性 使得變數的值僅可在該範圍內修改,並且可以在Inspector頁面呈現滑動修改變數的效果 ``` [Range(0, 1000)] public int exp = 0; ``` ### [Foldout] 屬性摺疊 使得多個的變數在Inspector頁面實現集合、可摺疊效果。(注:本方法並非Unity自帶,而是源自專案[InspectorFoldoutGroup - PixeyeHQ](https://github.com/PixeyeHQ/InspectorFoldoutGroup),如需使用該方法,僅需要將專案的指令碼配置到自身unity專案下即可) [](https://github.com/PixeyeHQ/InspectorFoldoutGroup) ``` [Pixeye.Unity.Foldout("Enemys")] public GameObject a, b, c, d, e; ``` ![](https://img2020.cnblogs.com/blog/1688704/202004/1688704-20200405151813751-122587915.png) ### [SerializeField] 強制序列化 使得private變數在Inspector指令碼頁面可見,同時也稱為強制序列化 ``` [SerializeField] private int coins; ``` ### [HideInInspector] 隱藏屬性 使得public變數在Inspector頁面不可視,進而實現保護變數 ``` [HideInInspector] public int maxHealth = 100; ``` ### [TextArea] 輸入域 對於字數較長的字串,擴充套件其在Inspector中的編輯區大小(原本僅能單行,且無法自動換行) ``` [TextArea] public string gameDescribe = ""; ``` ![](https://img2020.cnblogs.com/blog/1688704/202004/1688704-20200405151849374-2025023061.png) ### [AddComponentMenu] 新增元件到選單 寫於類名前,可以將該類直接新增到Add Component選單中 ``` [AddComponentMenu("Managers/demo1")] public class demo1 : MonoBehaviour { // ... } ``` ![](https://img2020.cnblogs.com/blog/1688704/202004/1688704-20200405151856809-1323145254.png) ### OnValidate() 資料檢查 對編輯狀態下、Inspector中輸入的資料進行檢查的函式 ``` private void OnValidate() { if (health < 0) { Debug.LogError("生命值不可為負"); health = 0; } else if (health > 100) { Debug.LogError("生命值不可超過最大值 " + maxHealth); health = 100; } } ``` ![](https://img2020.cnblogs.com/blog/1688704/202004/1688704-20200405151904221-1202016204.png) ### [ContextMenu] 上下文選單 可以為類增加一個上下文彈出選單,在Inspector頁面對當前指令碼右鍵(或者單擊指令碼圖示右側三個豎點)即可彈出自定義的上下文選單 ``` [ContextMenu("顯示當前生命值")] public void PrintHealth() { Debug.Log("Health = " + health); } ``` ![](https://img2020.cnblogs.com/blog/1688704/202004/1688704-20200405151911049-1273731685.png) ## 選單欄的擴充套件 ### [MenuItem] 選單欄 在編輯狀態可點選上方自定義的選單欄項實現特定功能,即擴充套件選單欄項 ``` [MenuItem("除錯/檢視版本資訊")] static void PrintSomething() { // 注意:僅有靜態函式才可使用該屬性 Debug.Log("當前Unity版本:" + Application.unityVersion); } ``` ![](https://img2020.cnblogs.com/blog/1688704/202004/1688704-20200405151918374-1617159848.png) # 參考 - [獨立遊戲開發 - IndiaNova](https://indienova.com/u/dev) - [InspectorFoldoutGroup - PixeyeHQ](https://github.com/PixeyeHQ/InspectorFoldoutGroup) - [你不可不知的Unity C#程式碼小技巧 - Michael Wang](https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247503312&idx=1&sn=f547e5a6dd9c8551ef028c330b5a74f1&chksm=fe1df97bc96a706df98e6d761aefbaff1270432676727eca883c6a426fafeaa1fa76728d26f3&mpshare=1&scene=1&srcid=&sharer_sharetime=1579407428670&sharer_shareid=3700fe0c888383356811eb94c583