做過幾個專案後,就會發現老是重複在寫相同的程式,或者有過多重複的操作,所以就想把一些很可能重複的工作,陸續整理起來,方便將來使用。而原本只是單純獨立的 Component,後來想弄幾個指令來更方便使用,最後,又想寫個編輯器工具了,所以設計了一些基本的東西,在此展示一下。
影片網址:https://youtu.be/OMal45Otzdo
Scene Manage
過去曾經發佈過兩篇關於場景管理的文章「Unity:設計靈活的無縫場景轉換機制」與「Unity:設計靈活的無縫場景轉換機制-實作測試」,該文裡所提到的做法,其實,還是有蠻多不理想的地方,所以,新製作的工具 Random Exp for Unity 也包含了重新設計的場景管理,使用「Unity:使用 UnityEngine.Events 讓程式更靈活、穩定」相關的做法,讓場景管理的使用上更加彈性,而且在場景轉換與管理上,連一行程式碼都不需要再寫,工具視窗也為了減少一些重複的操作,做了簡單的共用選擇界面。
影片中的場景管理,主要使用「初始化、載入中、起始畫面、關卡選擇、關卡範例」幾個場景,剛開始每個場景都是只有場景本身的物件配置,並沒有任何與場景轉換相關的東西,影片裡透過工具視窗來建立「初始化、載入中、一般」場景的基本架構,然後,再以拖拉的方式在 Inspector 視窗配置出相關的流程,使場景的開始與結束自動加入淡入淡出效果,並使得「初始化、載入中」場景可以將處理進度提供給 GUI 的進度條來顯示處理進度。
在這裡,每個單獨的場景都能夠個別執行,必要時會自動前往初始化場景進行整個遊戲的初始化工作,某些場景畫面可能需要或者不需要額外的「載入」場景,都可以簡單的透過選單欄位去加入或者取消,而這個場景名稱選單欄位的選擇項目,則是直接對應於 Build Settings 視窗裡,Scenes In Build 區域所設置的場景,此部分,有興趣的朋友們可以參考以前的分享「Unity:使用 PropertyAttribute 與 PropertyDrawer 製作場景選單欄位」。
Language
不管是製作遊戲或是應用軟體,個人覺得多語系的支援都是很基礎必須具備的,所以 Random Exp for Unity 本身也支援多語系(其實只有英文和中文 ^_^),由於批次命令(Batch Command)與組件(Component)的按鈕名稱是直接來自 Class 名稱(本文後面會說明),沒辦法隨著語系變更之外,其他關於工具選單、欄位與按鈕上的提示文字(Tips)幾乎都會隨著語系設定的變更而改變。
由於,語言的設定是屬於喜好設定的部分,所以,直接加入到 Unity 本身的 Preferences 裡面會更適當些,當語系選單沒有改變的時候,Apply 按鈕是無法點擊的,主要是因為語系設置會 Recompile,如果,沒有要變更語系卻點擊按鈕,沒有任何改變還要 Recompile,實在是太浪費資源和時間。
Command & Component Undo
我們在使用一般的應用軟體以及操作 Unity 的行為時,有時候會用到 Undo(恢復)和 Redo(重做)的功能,在 Unity 中製作工具,當然也不能半調子,新增遊戲物件(GameObject)或組件(Component)等等操作時,也是必須要能夠 Undo 和 Redo 才行,所以,Random Exp for Unity 的操作全部都要符合這種基本要求,這樣操作起來才會比較順手,而不用在有反悔的動作時,還要自己手動刪除或修改。
Extend Components
影片展示的最後一個部分就是關於擴充組件功能,在工具視窗上的 Components 面板上,對 Radom Exp for Unity 自訂的組件(Component)命令都已經加以分類了,可是,如果將來寫了新的程式,有新的 Component 也想要納入工具視窗裡面可以選擇,不就還要去更改原本的 Editor 程式,加入新的程式碼來增加新的選項,這樣好像有點麻煩,也會對工具產生一些風險。
如果有使用過 Playmaker 並曾經自己擴充 Action 的朋友們應該會比較清楚,在寫好擴充的 Action 程式碼的 Class 名稱的上一行加入一個 Attribute,就可以使得 Playmaker 的 Action 視窗多出使用者自己新增自訂的 Action 來擴充行為。
所以,Random Exp for Unity 也仿照相同的概念(雖然 Playmaker 在這部分並沒有 Open Source),在繼承 MonoBehaviour 的 Class 名稱上一行加入一個 ComponentCategory 的 Attribute,在存檔之後,工具視窗的清單裡面就會增加這個 Component 的項目,除了使用既有的分類之外,也可以使用一般的字串做為組件分類,因為如此,所以,使用中文字串來當作組件分類也是沒問題的。
以上,Random Exp for Unity 還有一些其他細節並沒有放在影片中展示,未來如果有機會,會再多多分享開發上的想法與經驗,還請大家多多關注粉絲專頁與 YouTube 頻道。
Unity 5.3.5f1
facebook 粉絲專頁:https://www.facebook.com/RandomExp。
Google+ 專頁:https://plus.google.com/118024819171916511609。
YouTube 頻道:https://www.youtube.com/channel/UCV6EVZj_vILRuD8gdrZBekQ。