噗通!一個多樣化的小型生態圈

小型生態圈開發過程

詹閔翔
Eric’s publication
5 min readJun 28, 2019

--

點擊圖片

目錄

  1. 前言
  2. 生態圈的設定
  3. AI模型架構
  4. 製作過程

前言

(慣例不想聽我碎念可以直接跳正文

本來想要打一大堆雜七雜八的內容,不過後來深思熟慮後覺得還是把文章專注在描寫多樣性生態圈好了,剛好當作未來繼續往下開發的存檔點XD

況且網路上已經找得到很多Kinect開發心得、注意事項、甚至類似的畢業專題心得分享,我這邊頂多也只能做出整理性貭的文章,很難有什麼更深入的論點,不過針對多元生態圈開發的文章反而少得很讓人意外(也可能是我沒有看到XD),所以這次討論的重點是如何做一個自主運作的“小型生態系”。

查看更多畢展相關訊息:連結

正文

一、生態圈的設定

學術上的生態圈的定義是

在一個環境下相互作用的生物們以及環境的統稱

不過在這次專案中我把裡面的生物行為分成兩層

  • 個體生物層:定義個體的行為包括外觀、移動參數
  • 群體生物層:同一種的生物會有相似的運動、攝食方式

個體生物的行為:

1.生命週期:

我把生態圈的生物區分成三個階段,並且可以動態的調整每個階段的過程
例如:大部分生物被吃掉就會提早進入死亡階段,而沒有被吃的生物會持續生存到壽命結束(或是超出邊界)

出生 → 成長→ 死亡

  • 出生階段:這個階段初始化並隨機設定所有參數
  • 更新階段:生物會捕食、被吃、隨機走動
  • 死亡階段:執行死亡時會發生的事件

2. 個體之間的行為差異

本來應該是要寫一組基因基數來執行生物之間多樣性,不過後來因為作品不需要遺傳功能、為了主視覺的美觀,所以我們手動調整每隻的個體差異,讓所有生物的出現都不會讓與畫面顯得突兀

看得到的差異:

  • 大小size:ex 有人穿衣服穿XS有人衣服穿XXL
  • 顏色差異:ex 黃種人、黑人

看不到的差異:

  • 食物偏好:食物的種類很多,就像有人喜歡吃剉冰有人喜歡吃冰淇淋
  • 壽命長短:每個生物的壽命都不一樣

3. 遊戲生物的感知:

  • 視覺感知
    感測視野範圍的動靜
    - 綠色的感知範圍
  • 聽覺感知
    比較無死角的感知方式
    - 橘色的感知範圍
  • 觸覺感知
    幾乎與身體同樣大小
    - 那個薄薄紅色一層

群體之間的行為:

這邊有點像是未來目標,這次實際上做到的只有不同生物之間的食物鏈,
希望未來有機會的話可以把以下開發完

1.同個群體中生物特性:

  • 繁殖(雌雄的互動)
  • 合作(共生、護幼)
  • 組織性(共同行動)

2.不同群體之間的互動:

  • 捕食
  • 競爭
  • 寄生
  • 片利共生
  • 互利共生

二、遊戲中AI的架構模型
根據 ”Unity3D 人工智能編程精萃“ 一書內容,遊戲AI的程式架構可以分為以下三個部分

Unity3D 人工智能編程精萃-通用的AI模型
  1. 運動層:
    移動角色的能力
    為了做到擬真可以根據物理引擎來設計角色的移動方式
  2. 決策層:
    角色做出決策的能力
    這邊的決策層其實比較像我們的大腦,由這層來判斷接下來應該要捕食還是遊走
    (甚至是死亡)
  3. 戰略層:
    戰略戰術思考的能力
    如果你的AI是一個小團隊,那這層要做的就是思考整個團隊該如何運作
    (ex:互相掩護、撤退)

而我將原本的架構簡化成下圖分別為

感測 → 決策 → 行為

更新階段流程

1.感測層
輸入感測器得到的資訊
ex : 哪一個感測器、感測到什麼

2.決策層
根據輸入進來的資訊以及參數決定做出什麼樣相應的行為

3.行為層
ex 像是死亡時淡出、爆炸效果
都屬於這層負責的項目

三、開發過程

最一開始我們看到了一系列顯微鏡底下的世界,覺得對冰冷的實驗室而言,顯微鏡底下活生生是另外一個世界,所以我在第一版的Demo中用Processing 模仿了顯微鏡底下的浮游生物

但隨著逐漸升級的架構,用Processing開發其實超級依賴程序員的程式整潔度,以及平常撰寫的習慣、以及有沒有勤寫註解…,以至於後來每次跟PM討論完一次功能,幾乎要對程式碼做大改革等級的動作,

很顯然的我不能再繼續仰賴Processing開發了,於是我用了一個多禮拜把原有的架構跟演算法全部搬移到Unity上,相對於介面全是程式碼的Processing後者明顯友善的很多,再加上素材控管的方便、場景物件的圖形化操作等等諸多方便的功能,我覺得這波不虧。

新增捕食狀態

再加上我們的主視覺元素…

大功告成拉~

參考資料
1. [書籍]Unity3D 人工智能編程精萃
2. [書籍]AI For Game Developers
2. [網站]生物_wiki
3. [網站]阿簡生物筆記-生物間的交互關係

--

--

詹閔翔
Eric’s publication

專注於各種可能的技術解決方案,喜歡從技術的角度解決問題,也喜歡接觸各種新科技跟open source專案與時代一起進化,並樂於將所見所聞製作成人人都能輕鬆理解的教學文章分享於網路平台。https://studio-frontend-one.vercel.app/