編輯器擴展——自定義窗口

Unity 允許用戶實現自定義窗口,以實現項目更加靈活且系統的配置。例如關卡編輯器、打包編輯器等等。它是能做出最多自定義功能的,但是實現過程其實也是比較固定的。總得來說自定義窗口最重要的部分其實是窗口內GUI得佈局和方法,也就是說你要在窗口裏做些什麼。

窗口類型

默認窗口(可與其他窗口合併):適合做編輯器窗口。
彈窗 (PopUp):適合做窗口分層。
對焦彈窗(DropDown,失去焦點自動關閉):適合提示類窗口,比如插件介紹。
輔助窗口(AuxWindow):說是能夠實現窗口重用,但是官網沒有實例,不清楚具體是怎麼實現重用的。
浮動窗口(UtilityWindow):所有不能被合併的窗口都叫浮動窗口
通知消息 (Notification):顯示在窗口上,會自動淡出。可以調用RemoveNotification()將其手動關閉。
繪製

繪製自定義窗口最重要的是要實現OnGUI函數和一個可供MenuItem調用的靜態方法(假設叫 Init 函數)。

OnGUI是自定義窗口類必須要實現的函數,其中實現具體佈局和方法調用,決定窗口裏看起來是怎麼樣的以及能實現什麼功能。

Init函數其實是MenuItem的靜態函數,用來相應MenuItem的點擊,其中主要設置一些窗口的屬性,比如大小、標題,位置等等。

重要API

EditorWindow:所有自定義窗口都要繼承自它
GUI、EditorGUI、GUILayout、EditorGUILayout:都是用來繪製控件的
上述四種區別:前兩種在繪製GUI的時候要傳入Rect來確定位置,比較死板;後兩種能夠自動排版;有Editor字樣的有針對於Editor相關的控件。
最最最重要的

就是工具方法。最根源的問題,你爲什麼要自定義窗口這纔是最重要的。其他控件的繪製其實問題不大,最不濟去翻API文檔就能實現控件了。但如果工具方法寫不出來,一切都白搭。

另外,要注意投入產出問題,做擴展的原始目的是提高效率,如果你完成的功能可以通過其他方式較快實現,那就沒必要做擴展了。

反編譯成熟插件的窗口擴展

要熟悉一項技能最重要的是自己動手實踐,但是參看前人經驗也同樣重要。我們可以通過JetBrain的dotPeek對插件dll文件反編譯成C#,這樣就可以參照學習了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章