噗通!一個多樣化的小型生態圈
小型生態圈開發過程
目錄
- 前言
- 生態圈的設定
- AI模型架構
- 製作過程
前言
(慣例不想聽我碎念可以直接跳正文
本來想要打一大堆雜七雜八的內容,不過後來深思熟慮後覺得還是把文章專注在描寫多樣性生態圈好了,剛好當作未來繼續往下開發的存檔點XD
況且網路上已經找得到很多Kinect開發心得、注意事項、甚至類似的畢業專題心得分享,我這邊頂多也只能做出整理性貭的文章,很難有什麼更深入的論點,不過針對多元生態圈開發的文章反而少得很讓人意外(也可能是我沒有看到XD),所以這次討論的重點是如何做一個自主運作的“小型生態系”。
查看更多畢展相關訊息:連結
正文
一、生態圈的設定
學術上的生態圈的定義是
在一個環境下相互作用的生物們以及環境的統稱
不過在這次專案中我把裡面的生物行為分成兩層
- 個體生物層:定義個體的行為包括外觀、移動參數
- 群體生物層:同一種的生物會有相似的運動、攝食方式
個體生物的行為:
1.生命週期:
我把生態圈的生物區分成三個階段,並且可以動態的調整每個階段的過程
例如:大部分生物被吃掉就會提早進入死亡階段,而沒有被吃的生物會持續生存到壽命結束(或是超出邊界)
出生 → 成長→ 死亡
- 出生階段:這個階段初始化並隨機設定所有參數
- 更新階段:生物會捕食、被吃、隨機走動
- 死亡階段:執行死亡時會發生的事件
2. 個體之間的行為差異:
本來應該是要寫一組基因基數來執行生物之間多樣性,不過後來因為作品不需要遺傳功能、為了主視覺的美觀,所以我們手動調整每隻的個體差異,讓所有生物的出現都不會讓與畫面顯得突兀
看得到的差異:
- 大小size:ex 有人穿衣服穿XS有人衣服穿XXL
- 顏色差異:ex 黃種人、黑人
看不到的差異:
- 食物偏好:食物的種類很多,就像有人喜歡吃剉冰有人喜歡吃冰淇淋
- 壽命長短:每個生物的壽命都不一樣
3. 遊戲生物的感知:
- 視覺感知:
感測視野範圍的動靜
- 綠色的感知範圍 - 聽覺感知:
比較無死角的感知方式
- 橘色的感知範圍 - 觸覺感知:
幾乎與身體同樣大小
- 那個薄薄紅色一層
群體之間的行為:
這邊有點像是未來目標,這次實際上做到的只有不同生物之間的食物鏈,
希望未來有機會的話可以把以下開發完
1.同個群體中生物特性:
- 繁殖(雌雄的互動)
- 合作(共生、護幼)
- 組織性(共同行動)
2.不同群體之間的互動:
- 捕食
- 競爭
- 寄生
- 片利共生
- 互利共生
二、遊戲中AI的架構模型
根據 ”Unity3D 人工智能編程精萃“ 一書內容,遊戲AI的程式架構可以分為以下三個部分
- 運動層:
移動角色的能力
為了做到擬真可以根據物理引擎來設計角色的移動方式 - 決策層:
角色做出決策的能力
這邊的決策層其實比較像我們的大腦,由這層來判斷接下來應該要捕食還是遊走
(甚至是死亡) - 戰略層:
戰略戰術思考的能力
如果你的AI是一個小團隊,那這層要做的就是思考整個團隊該如何運作
(ex:互相掩護、撤退)
而我將原本的架構簡化成下圖分別為
感測 → 決策 → 行為
1.感測層
輸入感測器得到的資訊
ex : 哪一個感測器、感測到什麼
2.決策層
根據輸入進來的資訊以及參數決定做出什麼樣相應的行為
3.行為層
ex 像是死亡時淡出、爆炸效果
都屬於這層負責的項目
三、開發過程
最一開始我們看到了一系列顯微鏡底下的世界,覺得對冰冷的實驗室而言,顯微鏡底下活生生是另外一個世界,所以我在第一版的Demo中用Processing 模仿了顯微鏡底下的浮游生物
但隨著逐漸升級的架構,用Processing開發其實超級依賴程序員的程式整潔度,以及平常撰寫的習慣、以及有沒有勤寫註解…,以至於後來每次跟PM討論完一次功能,幾乎要對程式碼做大改革等級的動作,
很顯然的我不能再繼續仰賴Processing開發了,於是我用了一個多禮拜把原有的架構跟演算法全部搬移到Unity上,相對於介面全是程式碼的Processing後者明顯友善的很多,再加上素材控管的方便、場景物件的圖形化操作等等諸多方便的功能,我覺得這波不虧。
新增捕食狀態
再加上我們的主視覺元素…
大功告成拉~
參考資料
1. [書籍]Unity3D 人工智能編程精萃
2. [書籍]AI For Game Developers
2. [網站]生物_wiki
3. [網站]阿簡生物筆記-生物間的交互關係