close

今年的TGDF有聽了蠻多的分享,個人覺得是比較想聽技術,但其實也猜到理論一定大過技術,今年下午茶比較豐盛(這是重點嗎XD

好啦打了很多廢話,就進入主題啦

遊戲狀態的函式

下方為遞迴函示

function gn(s' = gn-1(s,P),P) | M

M為遊戲規則與邏輯

s為初始化狀態

P為玩家設定

s'為目前的遊戲狀態

P玩家設定

由前一狀態與玩家資源的變動進而得到這遊戲最後的狀態

遊戲其實是由許多狀態組成

隨著遊戲時間得不同,各項玩家目前所能控制資源也會不同

而在某個時刻,這些玩家能控制的資源組合,就是所謂的狀態

而資源部分可以有哪些?

有可能是位子、有可能是血量、有可能是角色類型.....

而決策邏輯的其一行為選擇就是由某一玩家元素和目前狀態取得(就是說我這個AI角色(玩家)在這個情勢下能做甚麼事情)

決策邏輯是一連串行為的序列(能做的事情有很多種)

隨著遊戲的不同能做的行為也不同

前面有提到這些行為是由不同玩家的狀態資訊而取得

而決策邏輯其實就是一堆演算法,每個演算法白話一點就是"我要怎麼做,告訴我"

AI機器人  => 就是一堆行為的最佳演算法的集合

 

 

以撞球8-ball為例:有5個階段

前面有說隨著遊戲的不同能做的行為也不同

這5個階段其實就是5個行為

然後5個行為也就會有5個最佳演算法

這裡的最佳演算法並不是獨立的

而是這些演算法經過交叉運算進而得到的最佳解

而這些也會因AI等級不同而有不同的排列組合

也可以為每一個角色的行為做各種不同的列舉

依各個演算法裡有各個不同行為,而在下一步又會經過一輪的組合,以此類推,把所有行為排列組合這個資料量是非常的大的

所以在做排列組合前,可以先屏除此輪不要的行為

這裡可以依照不同的情況選擇需要的演算法去找最佳解:

ex:蒙地卡羅演算法、Alpha Beta演算法.......

 

 再來想說一下Utility AI 類仿真人行為(雖然不是這次的主題XD,此為2017 GDC 分享會的AI in Game的議程)

Utility AI

仿真人行為:

假設很餓想吃東西,吃了一片披薩,還是餓,在吃一片,還是餓,那第三片他會吃還不吃,有可能會有可能不會

畢竟同一個東西吃多了可能會反胃,這就證明吃披薩和肚子餓並不一定是正比

這就是仿真

再來把FPS決策邏輯縮小

目前幾種行為:

  • 移動到敵人
  • 開槍射敵人
  • 移動到掩蔽物
  • 裝子彈

甚麼時候做甚麼,有幾種參數做比較

子彈是否上膛、是否在掩蔽物範圍、移動到敵人的距離、到掩蔽物的距離

子彈上膛 - 有 or 沒有

是否在掩蔽物範圍 - 是 or 不是

移動到敵人的距離 - 以100 50 10 1 來劃分等級

到掩蔽物的距離 - 以50 5 1 來劃分等級

Behaviour Tree來畫

誰擺在第一個判斷,將會決定複雜程度

一般來說,會把變化情形少的放在前面,雖然目前看起來很直覺,但目前是縮小決策邏輯,隨著決策越多會越來越複雜

Utility AI

一個表格4個Action項目就畫出來了

第一:把行為列出來

第二:依照行為給分

而Utility AI 和 Behaviour Tree也可以搭配使用

可以先用Utility AI做大規模的巨觀,再用做次微觀,進而列出Behaviour Tree

優點:

用權重的調整,輕鬆了修改整個判定

行為的擴充容易

品質提升,不需改寫程式

Utilty AI 還是有缺點

取決於做的人,權重調整等等

可以用學習的方式,得到這些數值,去仿真人行為

分享就到這邊啦,很多東西還要更深入的研究,這裡理論部分比較多 bye~

 

 

 

 

 

 

 

arrow
arrow

    Kouhei 發表在 痞客邦 留言(0) 人氣()