iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
0
自我挑戰組

探索Unity中的視覺化製作工具系列 第 8

於Bolt中實現更多Unity中常出現功能

這次的範例中,會嘗試更多的事件。為了讓使用情境符合試驗,假想了一個常用的案例,也就是怪物系統部份功能實作。為了要能怪掌控怪物系統,利於開發上的除錯,用UI呈現系統資訊,並可用UI進行系統的微控。

基於這樣的假想下,首先實作的是怪物數量的UI資訊。UI利用Canvas進行,沒有複雜的設計,置於左上方並呈現目前怪物數量。如同多數的呈現方式,銜接於Update事件後,並將怪物數量以變數方式保存,並由UI Text物件管理。

接下來就是處理較為複雜的怪物生成機制。假想的生成中,需要考慮到已產生怪物的最大上限,比方說10隻怪物就不能再生成,已免資源不夠又或是難度太高。故要放入可產生最大值和現在怪物數量值。再者用Loop快速產生也可能導致一時間爆量的資源使用,故採用一段時間慢慢生成的方法。這裡引用之前試驗過的Timer,並給予1至2秒左右的時間緩衝,再進行生成。

而這裡為了避免於同一個Flow Graph(FG)和Update事件衝突,且做概念上的區隔,產生另一個FG,專門負責生成怪物。而前置工作,產生怪物Prefab,和實際撰寫程式碼時一致,不會因為用Bolt而有任何特殊的不同。

生成怪物的邏輯看起來不少方塊,主要是確定怪物上限還未達到,才近行產生。

不雖然生成的主體看起來是完成了,但有些連線上的細節沒有注意到,之後會再修繕。

接著加於怪物上加了FG,讓它可於一段時間後被移除掉。而這裡特別要提及的是,當移除時,發送一個客製化事件給怪物系統,讓它可以接到事件後進行對應的處理。

也就是在Bolt的架構裡,除了原有針對Unity的事件有定義外,它本身的擴充是藉由客製化事件,達到開發者可依據自行專案的需求而建立的事件。且此事件可以自行夾帶多個參數(此處未放參數),讓接收端自行運用。

既然怪物移除時發送了一個事件,那於怪物系統那也順理成章的要再用一個FG進行接收和處理。此處拿取事件後,只做怪物數量值的調整。而再前處提及UI更新的部份,因為是接在Update事件後,故於此值改變後很短的時間內(1個Frame?)就會更新其值。

至此大致上完成了主要功能,為了再試驗其它事件,故加上了一個UI Button,讓它被按下時會暫停怪物系統生成怪物的機制。另行加上了一個Branch和修正了之前線沒有連好的問題。

在運行後發現了一個有趣的現象,Branch的位置會影響到多少個方塊參與運作,這點其實寫程式時會特別去檢查,但在圖像式的行為給予上居然可以如此一目了然。簡單來說就是這張畫面上有多少個藍色的方塊(Bolt運行時有觸及到的部份),如果Branch前後位置對換,則藍色的方塊會更少一些。說實在的,在多數情況下,這不會是太大的問題,少運行一點點的行為,對於效能並無太長足的幫助,但可以從這裡快速的看到,也著實覺得Bolt很了不起。

那個會暫停怪物生成的按鈕,為了要讓目前狀態更加清楚,則會依據目前是暫停還是進行的狀態進行按鈕上文字的調整。

不過一但文字在按鈕按下時會改變就表示它也必需於某處進行初始化給值的動作。而一開始一直更新怪物數量的FG裡,串接Start事件後進行處理是最適合不過的。

到此,假想的怪物系統功能差不多都實現了,雖然怎縻看都還只是範例等級的系統,但也著實的接觸到不少的觸發事件。

今日測試用的專案放罝在Git Repo中的unity-ui-bolt目錄裡。防止侵權,Bolt外掛並未含入,有興趣開發者可自行購買後引用。


上一篇
讓小方塊利用Bolt進行移動
下一篇
用Bolt合作開發的可能性
系列文
探索Unity中的視覺化製作工具30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言