1. 程式人生 > >遊戲AI自定義--行為樹+xlua+json

遊戲AI自定義--行為樹+xlua+json

fun 選擇 ava 好的 需要 b-s trigger scrip 檢測

ai在遊戲開發過程中一直都是被反復修改的一部分。策劃短期內的需求隨著遊戲內容越來越豐富,難免會調整ai行為,所以我長久以來一直想有一個完全交給策劃同誌們編輯的遊戲ai編輯器。


我們考慮一下遊戲實際邏輯ai,比如有這樣一些需求:角色需要找尋一個自己能打得過的野怪並且避讓某些打不過的大型野怪,或角色達到一定等級做一些特定行為等。這些行為加條件的組合肯定是依賴於角色本身已經實現了一些基本的功能,例如行走到指定位置,播放指定動作等,這些邏輯需要提前都實現好,這裏不做說明。然後留給ai中的邏輯去調用合適的用戶api。 還有就是用狀態機還是行為樹去實現?我感覺行為樹更好一些。狀態機在完成需求固定且狀態比較少的時候可以用一下,一旦出現狀態添加或刪除就需要大動幹戈了,而行為樹的擴展性就很出色了。行為樹大家能找到很多資料,大致上的內容就不說了。主要說一下這裏的一些區別吧。
技術分享圖片 我這裏把節點分成這4類 ·葉節點:可執行狀態的節點,也就是主要的行為邏輯都需要在這個節點下實現。 另外3類節點是控制型節點 ·順序節點:順序執行其子節點 ·選擇節點:通過計算子節點的權重隨機選擇一個節點 ·並發節點:執行所有自己點 這4類節點本身都有進入條件的檢測。 為了更好的配合策劃開發,我用xlua來調用遊戲中的用戶api。這是葉節點的xlua文件,控制節點的xlua文件也類似只是沒有 update()和trigger()。腳本是外部調用的,首先會執行detect()判斷這個節點的進入條件,當返回true的時候才會調用enter()。 ·function detect()
--節點的進入條件 ·function enter()--進入後調用 ·function update()--節點進行中(只有葉節點才有) ·function trigger()--外部事件觸發後響應 (只有葉節點才有) ·function exit()--退出節點

function detect()
	return true
end
function enter()
end
function update(dt)
end
function trigger(type,obj)
end
function exit()
end

  

假如現在有這個需求:
有一個人去上班,然後工作到下班,下班的時候會有兩種選擇,直接回家或者去女友家,去女友家肯定不能空著手去,應該先去禮品店購買一些禮品,有了禮品後去女友家,和女友約會。這樣一天就結束了,開始了又一天的生活。
先來看看這顆行為樹: 技術分享圖片 有了這顆樹的羅列我們可以在編輯器下構造如下結構: 技術分享圖片 技術分享圖片 這顆樹結構最後導出json格式用於構造節點 這顆樹的執行效果是這樣的: 技術分享圖片 下面是源碼下載:資源下載(百度雲)

遊戲AI自定義--行為樹+xlua+json