創作內容

4 GP

Unity開發者工具初學筆記2——MenuItem、EditorWindow和位置較正器

作者:pudding│2020-06-08 09:47:43│巴幣:8│人氣:391
上回我們簡單看了一下Unity開發者工具後,這次就讓我們來再看看其他幾個平常可能會用到的工具範例吧!
今天我們大概會談到
-MenuItem (在Unity Editor的工具欄位新增你想要的功能)
-EditorWindow (特別為了你要的功能再寫一個視窗出來)
預計的成效大概會像下面這樣

……我錄完之後才想到Win10原本的螢幕錄影是不會把額外的小視窗錄進去的,但是我又懶得再去找其他錄影軟體QQ(ㄍ
因此這一段我另外再截幾張圖片說明吧

位置校正器工具主要會有兩個欄位
1.校正器的座標模式 (笛卡爾座標/極座標)
2.校正單位 (物體間隔/越大表示會校正的越遠)
3.角度分割 (將一整個圓圈切成幾格,只有在極座標模式中用的上)

以下就讓我們實際來看看這些功能要怎麼做吧!

—MenuItem
MenuItem是一個Attribute(先前提到的屬性標籤),用在靜態(Static)的函式之上,只要加了這個標籤就可以在編輯器當中直接呼叫該函式。

為了要做到今天想要的效果,我們需要先寫出具體上能夠對遊戲物件進行校準的函式。
雖然可能不是重點但還是稍微說明一下。
Mathf.Round是用來計算四捨五入結果的函式,這裡的話前後稍微做一些調整就可以把結果改為 "依照我們要的單位校正"。
下面的話則用到了Extension method,這是我在看先前Freya Holmér的教學時看到的,如同截圖中註解所說的,他有點像幫Vector3擴充了一個方法出來,如此一來可以幫助你未來寫得更加直觀(雖然我沒有很習慣),另外要特別記得Extension method的第一個參數要寫 "this",代表你所擴充的類別,有興趣的人不妨看一下官方說明(雖然我覺得C#的官方文件都寫得很拗口)。

接著讓我們看看MenuItem的部分
這邊大致有A和B兩個部分可以看
A部分是我們主要呼叫的函式,他會去把Selection(我們在編輯器當中選取的所有東西)當中的每一個遊戲物件取出,並切對他們一一進行位置校正。
同時特別注意,如果你希望在校正後可以按Ctrl+z還原的話,那記得要跟Undo系統要求說要紀錄這些物件的變化(截圖中40行)。
B部分則是ValidateFunction,他是用來檢查A部分能不能執行的,在這裡他會去檢查Selection是否有選取到任何的GameObject。
(為選取任何物件時,選項暗下來,無法點擊)

(這裡選取了一些物件後就可以正常點擊了!)
這裡除了設定他的路徑外,我們也額外在後面加上了熱鍵的宣告,如果對熱鍵要怎麼設定有興趣的話,不妨看一下官方的說明

—EditorWindow
如果你想要另外再生出一個視窗來輔助工作的話,這時候我們就可以用上EditorWindow,以下讓我們先看一個簡單的範例。
一個基本的視窗需要繼承自EditorWindow,並且要另外寫一個MenuItem的函式來開啟視窗。
(建議自訂的視窗都寫在Tools底下,比較整齊,另外跟上回一樣的,Editor相關的類別最好都放在Editor資料夾底下,因為它有著以下特性)
(此段節錄自這篇教學)

那接下來我們該試著讓它顯示我們需要的變數了。
(先宣告我們要的變數)
接著跟上次的筆記很像,只是我們這次是把自己帶入SerializedObject當中,供其觀察,並在OnGUI(有點類似編輯器畫面中的Update)中將這些變數顯示出來。
讓我們看看實際效果。


需要的變數都到位了以後,接著我們就要來實際呼叫校正的函式了。

(在SnapSelections函式當中去區分不同座標系統的校正方法,笛卡爾座標的話就直接去用先前寫的Snapper.SnapTheThings)
我們順便看一下前面按鈕的部分,這裡寫了using (new EditorGUI.DisabledScope(Selection.gameObjects.Length <= 0))
這一段程式碼有兩個我想特別提的部分,第一個先提一下using,這玩意兒我們平常應該幾乎都是用在引入函式庫(像是using UnityEngine),但在這裡我們是拿它來當作一段陳述,用來表示後面宣告的變數只會存在於這個區段。
此處我們只有在該按鈕的地方才會去判定是否符合該條件,因此這個判斷式也只會留在此處。
接著我們再來看看using當中的東西是什麼,我們在此宣告了一個DisabledScope,當他裡頭所帶入的條件成立時它就會把下面顯示的東西調成Disable(暗下來,無法互動),讓我們看看一個範例。
這裡看到我完全沒有選取任何遊戲物件時,右方的視窗下半部也跟著暗了下來。
用using將它限縮在固定範圍內,除了因為之後用不上以外,另一方面也是為了避免DisabledScope影響到後面其他要顯示的東西。


好啦,我覺得到目前為止也寫得有點長了,剩下繪製座標網格,以及如何計算極座標的校正問題就留到下一次再繼續聊吧! 希望大家還喜歡這次的筆記分享

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4809794
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

4喜歡★pudding70119 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:Unity開發者工具初學... 後一篇:Unity開發者工具初學...

追蹤私訊切換新版閱覽

作品資料夾

a86189642祝福
看到得人會變得幸福哦!看更多我要大聲說昨天15:40


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】