日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Unity编辑器扩展-基本界面编写

發(fā)布時(shí)間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。