unity-AI設計理念和編程思想(一)

    由於前段時間的尋路小車讓我意識到AI在遊戲還有虛擬現實中的重要性,回想以前的無論是《地下城與勇士》還是《英雄聯盟》裏面的野怪都是很被動,幾乎可以忽略自主能力,當然有好處也有壞處。

    首先,需要明白,AI對象是非玩家角色,AI角色可以認爲它們處於 感知->思考->行動 這樣一個循環中。現代遊戲對AI的需求分爲三種:運動能力,決策能力,戰略能力。比如無論是英雄聯盟還是王者榮耀都有人機對戰,但是這些幾乎都是新手的專場,原因是這些AI電腦玩家水平很低,決策能力和戰略能力很低。

    我相信,現在火熱的人工智能落腳點之一便是遊戲AI。接着說感知,AI去感知環境是很難的,做法有很多,簡單譬如王者和LOL野怪都是你攻擊它然後纔會反擊,地下城之類都是你進入某個範圍它會朝你攻擊,且都會有範圍的限制,這些幾乎不能算作AI,真正去感知子系統的比如使用碰撞體、射線Raycast進行檢測碰撞得到信息,這些還是比較簡單的做法,如果和深度學習裏的圖像識別結合,我認爲這纔是一個比較智能的感知環境。思考過程是很複雜的,一般都是我們定義好很多種情況之後AI角色相應的做出判斷。其實,如果我們能同樣使用深度學習,相信會發生意想不到的結果。學習“阿爾法狗”的做法,去改變AI角色,行動包括行走和攻擊等行爲。但是這樣也有一個弊端,AI角色過於聰明會使遊戲玩家失去信心,比如“阿爾法狗”現在難求一敗,這對很多圍棋玩家實在是種傷害,但這裏我們不需要關心這麼多,只談技術。比如你發現了敵人,你需要躲避還是攻擊,這是思考決策的過程,但如果AI打算逃跑,需要找到合適的路徑還有躲避障礙物以及其他敵人。

    本節先說感知。如同我上面所說的,使用 射線檢測  來感知一般都是用於時刻都需要去感知信息的,而很多遊戲時間並不需要這樣,AI角色可以通過兩種方式獲得遊戲世界的信息-- 輪詢和事件驅動 。簡單來說,輪詢就是你想知道什麼,就去“查詢”,比如你想知道周圍是否有敵人,你就去查敵人的位置就可以了,弊端很明顯,太耗資源。事件驅動方式,設置事件管理器,如果發生了感興趣的事件,讓事件管理器告訴AI,最常見的就是觸發器。觸發器的種類很多,比如時間相關的(刷新怪物),輸入接口觸發(用戶按鍵)等等。

    遊戲中最常見的感知類型就是視覺和聽覺,它們都需要設置許多觸發器和感知器  。而且,遊戲需要模擬人的記憶,如果人停止攻擊野怪也停下來,這肯定不可以的。所以需要設置一個記憶感知器。所有觸發器的基類-Trigger類,所有感知器的基類-Sensor類。所有視覺和聽覺的感知器和觸發器都是它倆的派生類。一般的你需要爲它們設置一個事件管理器,用來更新和處理所有的觸發器,並維護一個感知器列表。

    觸覺感知,在Unity中給物體加上碰撞體,選擇檢視板的isTrigger即可標記爲觸覺觸發器,這個很常見,自動門,提示信息等,不多說了。

    記憶感知,實現一個SenseMemory類,創建一個記憶列表,主要是記憶保存對象一些屬性和保存時間。

    對與感知的使用一般都需要具體情況具體分析,儘量減少內存消耗而且使AI角色合理合適做出反應。

    下一篇總結決策思想。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章