今年的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~