Unity编辑器扩展-基本界面编写
生活随笔
收集整理的這篇文章主要介紹了
Unity编辑器扩展-基本界面编写
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一.在編輯器上增加一個(gè)MenuItem
先進(jìn)行第一步,給編輯器加個(gè)菜單,通過(guò)[MenuItem("AXX/BXX")]就可以在編輯器的上邊菜單欄增加一個(gè)下拉菜單AXX,并增加一個(gè)按鈕BXX。只要把這句話寫在我們定義的函數(shù)上方就可以,然后我們點(diǎn)擊這個(gè)按鈕,就會(huì)調(diào)用這個(gè)我們自定義的函數(shù)。不過(guò)有一點(diǎn)一定要記住,這個(gè)函數(shù)要是static的!(想一想就可以知道是為什么,編輯器沒(méi)有必要搞粗一個(gè)對(duì)象之類的,因?yàn)槲覀円{(diào)用的只是這個(gè)方法)例如:
using UnityEngine; using UnityEditor; using System.Collections;public class EditorTest {[MenuItem("MyTools/EditorTest")]public static void ConfigDialog(){Debug.Log("EditorTest ToolButton is pressed!");} }我們的編輯器就多了這樣的一個(gè)工具選項(xiàng)MyTools,點(diǎn)擊出現(xiàn)了EditorTest下拉菜單,再點(diǎn)擊按鈕就會(huì)輸出Log了,如下圖所示:
二.創(chuàng)建一個(gè)對(duì)話框
如果我們嫌這個(gè)一個(gè)下拉菜單不爽,那我們就可以創(chuàng)建一個(gè)對(duì)話框,然后就可以在對(duì)話框里放更多的按鈕或者一些工具條來(lái)調(diào)節(jié)相關(guān)內(nèi)容,下面看一下在Unity編輯器中對(duì)話框的創(chuàng)建以及使用。 using UnityEngine; using UnityEditor; using System.Collections;//typeof(編輯器類名),繼承EditorWindow [CustomEditor(typeof(EditorTest))] public class EditorTest : EditorWindow {//通過(guò)MenuItem按鈕來(lái)創(chuàng)建這樣的一個(gè)對(duì)話框[MenuItem("MyTools/EditorTest")]public static void ConfigDialog(){//GetWindow創(chuàng)建EditorWindow.GetWindow(typeof(EditorTest));}public UnityEngine.Object go = null;//對(duì)話框中的各種內(nèi)容通過(guò)OnGUI函數(shù)來(lái)設(shè)置void OnGUI(){//LabelGUILayout.Label("Label Test", EditorStyles.boldLabel);//通過(guò)EditorGUILayout.ObjectField可以接受Object類型的參數(shù)進(jìn)行相關(guān)操作go = EditorGUILayout.ObjectField(go, typeof(UnityEngine.Object), true);//Buttonif (GUILayout.Button("Button Test")){Debug.Log(go.name);}}} 結(jié)果如下:通過(guò)這樣的一個(gè)腳本,我們就可以在Unity中創(chuàng)建一個(gè)對(duì)話框,然后再在對(duì)話框里進(jìn)行進(jìn)一步的設(shè)置。
三.擴(kuò)展Inspector面板
這一部分比較重要,也是我們最經(jīng)常使用的部分。1.ContextMenu
比如我們寫了個(gè)腳本,但是有一些函數(shù)需要調(diào)用觸發(fā),測(cè)試的時(shí)候又不方便,一種方法是重寫MonoBehaviour類的OnGUI方法,但是這種方法也比較笨,要寫好多代碼,除非真機(jī)調(diào)試的時(shí)候,沒(méi)有辦法才這樣做,我們可以通過(guò)一種更簡(jiǎn)單的方式來(lái)實(shí)現(xiàn)。 我們?nèi)绻胫苯诱{(diào)用我們繼承MonoBehaviour的類的某個(gè)函數(shù),只需要在函數(shù)上加上[ContextMenu(“函數(shù)名稱”)]即可: [ContextMenu("Context Menu Test")]void OnTest(){Debug.Log("Context Menu is called");} 結(jié)果如下:通過(guò)ContextMenu,我們可以更方便地測(cè)試我們的腳本,隨時(shí)通過(guò)編輯器調(diào)用我們的函數(shù),而不用再去其他外層函數(shù)。
2.自定義inspector面板
有時(shí),我們需要更加方便美術(shù)或者策劃來(lái)編輯對(duì)象屬性,這時(shí)候,我們就可以通過(guò)自定義Inspector面板來(lái)進(jìn)行控制: using UnityEngine; using UnityEditor; using System.Collections;//typeof中參數(shù)即為我們需要定義Inspector面板的組件 [CustomEditor(typeof(CustomEditorTest))] public class TestCustomEditor : Editor {CustomEditorTest script;public override void OnInspectorGUI(){base.OnInspectorGUI();//將target轉(zhuǎn)化為我們需要的腳本script = target as CustomEditorTest;//增加一個(gè)按鈕if (GUILayout.Button("Test Button")){//可以直接訪問(wèn)CustomEditorTest類的內(nèi)容script.Test(script.num);}} } 結(jié)果:?
四.編輯器插件常用函數(shù)
1.AssetDatabase.CreateAsset可以幫住你從資源目錄中創(chuàng)建一個(gè)資源實(shí)例。2.Selection.activeObject返回當(dāng)前選中的對(duì)象。?
3.EditorGUIUtility.PingObject用來(lái)實(shí)現(xiàn)在Project窗口中點(diǎn)擊某一項(xiàng)的操作。
4.Editor.Repaint用來(lái)重繪界面所有的控件。
5.XXXImporter用來(lái)設(shè)置某種資源的具體導(dǎo)入設(shè)置(例如在某些情況下你需要設(shè)置導(dǎo)入的貼圖為可讀的)。?
6.EditorUtility.UnloadUnusedAssets用于釋放沒(méi)有使用的資源,避免你的插件產(chǎn)生內(nèi)存泄漏。?
7.Event.Use用來(lái)標(biāo)記事件已經(jīng)被處理結(jié)束了。?
8.EditorUtility.SetDirty用來(lái)通知編輯器數(shù)據(jù)已被修改,這樣在下次保存時(shí)新的數(shù)據(jù)將被存儲(chǔ)。
六.參考鏈接
Unity3D編輯器插件編寫_脫莫柔的博客-CSDN博客
Unity3D 場(chǎng)景編輯器擴(kuò)展學(xué)習(xí)筆記-Editor_kun1234567的博客-CSDN博客_unity 場(chǎng)景編輯器
【風(fēng)宇沖】Unity3d編輯器拓展_風(fēng)宇沖_新浪博客
總結(jié)
以上是生活随笔為你收集整理的Unity编辑器扩展-基本界面编写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: $.ajax()参数详解及标准写法
- 下一篇: 让 步( 写的太好了!)