Unity行為樹設計_第1頁
Unity行為樹設計_第2頁
Unity行為樹設計_第3頁
Unity行為樹設計_第4頁
Unity行為樹設計_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Unity行為樹設計行為樹基本概念行為樹:常用的AI決策模型有狀態機和行為樹兩大類。狀態機更接近人的思維,但行為樹更加 直觀、靈活。因此,行為樹目前變成了復雜AI的主流模型。行為樹與有限狀態機都可以完成一組相同的任務。其中有限狀態機定義了一組狀態,同 時描述了這組狀態中,在不同情況下,彼此轉化的一組規則。有限狀態機指導了智能體 在不同的情況下完成它們的功能,但當智能體的處理邏輯變得較為復雜的時候,狀態的 數量會急劇上升,與此同時,它們之間的轉化關系也會呈指數型的增加,使開發者越來 越難以理解與管理。對于這種情況,使用有限狀態機中的層級狀態機能起到一定程度的作用,在層級狀態機 中,智能體的行為會

2、進一步分解,變成更小的片段。但對于轉換關系的爆炸式增長,沒 有得到很好的解決。行為樹可以看成一種樹型的數據結構,行為樹中有葉節點和組合節點。同時把行為劃分 成了很多層級,較低層級的行為能夠進行組合,成為較高層級的行為。在行為樹需要得 到更新的時候,結構會執行DFS操作,依次達到末端的葉節點,葉節點根據不同的情 況,反饋不同的結果,例如,可以是“執行成功”或者“執行中”。由于這樣的樹型結 構,每一個分支并不是同時遍歷到的,同時利用這種特性,可以很輕易地設置行為動作 的優先級水平,讓靠前的葉節點承擔更重要的行為。行為樹中的節點:行為樹中有許多種節點,甚至可以自定義節點,來實現目標功能。(1)節點的

3、返回執行中:表示當前的節點還在執行中,下一次的執行仍然選擇當前節點。成功:表示當前節點執行成功。失敗:表示當前節點執行失敗。(2)根節點是行為樹的入口,類型可以是任意的。(3)組合節點選擇節點/優先選擇節點:從左到右依次執行子節點,同時在第一個非失敗的節點停住 并返回。當所有節點返回失敗時,自身也返回失敗,否則返回最后節點的狀態。隨機選擇節點:規則與選擇節點基本一致,但它的順序是隨機的,且每個子節只會被選 擇一次。順序節點:從左到右依次執行子節點,若子節點返回成功,則繼續執行,在第一個非成 功的節點停止并返回。修飾節點:相當于某個節點的前綴,對該節點進行行為的改變。修飾節點可以有很多種。 例如

4、,Until Success/Failure會一直執行子節點直到返回了成功/失敗。Limit會給子節點 一定次數的機會,若還是失敗了,才返回失敗。還有時間控制相關的修飾節點。(4)并行節點并行節點也會依次執行所有的子節點,但是不管成功或是失敗都會繼續執行,并在執 行完畢后根據所有的子節點的返回來最終確定自身的返回值。(5)葉節點條件節點:相當于一個if判斷語句,根據判斷的結果自身返回對應的值。 行為節點:用來完成具體的操作。面舉一個例子來綜合說明本節的內容。在系統中,一個很常見的行為是有障礙的目標點 抵達行為。一個坦克智能體要抵達前方不遠處的半開放區域的集合點,則它需要根據判 斷前方的路障是否

5、處于激活狀態。如果路障處于非激活狀態,那么它可以徑直進入;但 如果路障處于激活狀態,目標點處于封閉區域內,則智能體需要對路障進行破壞等操作, 破壞目標點所在區域的封閉性,這個邏輯可以下圖所描述的行為樹表示。這棵行為樹綜合運用了選擇節點與順序節點等節點的組合,利用行為樹的特性較為清晰表示 了上述的邏輯,能夠較好地實現智能體的行為。智能體的行為設計結合具體的實際工程,戰場上共有三個A方坦克和三個B方坦克。其中紅方中的一個由玩 家控制,雙方在戰場上進行交火,當B方全滅時,另一方還有剩余坦克則取得勝利。玩家和 智能體的目標都是盡可能保護自己的條件下然后摧毀B方。兩隊在地圖上的位置是隨機分布 的,不過也

6、存在參數去控制它們之間的最小距離。一旦程序開始運行,首先雙方會在地圖上 進行巡邏,如果發現敵人則展開攻擊,同時要注意在雙方不對等或者自己健康狀態不好的時 候保護自身,另外在此期間會通知隊友,同隊之間會產生互動,因此可以把智能體的行為概 括為:巡邏行為、攻擊行為、規避行為、交互行為。假設場景中有N個B方坦克,為了方便說明與調試起見,設定N=3。在目前的模式中,它 們沒有主次之分,沒有“首領”因此它們的邏輯基本一致,可以共享同一棵行為樹。但是, 由于行為樹中存在隨機節點,它們本身也存在參數設定的不同,因此,它們又具有自身獨特 的個性,避免了重復單調,保證了多樣化。A方的AI坦克同樣也將有相同的戰斗

7、邏輯,遵循這四種行為,但是由于有真人玩家的參與, 其中的交互行為將有所不同,不再單純是和其它智能體進行交互。通過對交互行為的重新設 計,可以滿足A方智能體與玩家之間的互動。1、巡邏行為巡邏行為是最基本的行為,也是智能體在idle狀態默認的行為。當系統開始運行時,智能 體就會處于巡邏狀態。它會根據具體的設定,首先對己方附近的地圖進行巡邏,如果沒有敵 人的話,則會執行路徑搜索算法,前往隨機的幾個標識地點。如果還是沒有發現敵人,則會 繼續前往下一個隨機標識地點,且地點之間不會重復。如果所有地點都搜索完畢還是沒有發 現敵人,說明本輪的搜索沒有發現敵人,究其原因可能是無意間和敵人錯開了,則會展開新 一輪

8、的搜索。因此,經過行為樹的幾輪選擇之后,雙方敵人終會相遇產生戰斗,避免了進入 死循環的尷尬場景。巡邏行為節點是一個判斷節點,巡邏行為節點下方級聯了順序節點,依次檢測是否存在敵人 和特定的信號,然后執行巡邏的具體行為。當巡邏過程中發現問題時,下方的節點會返回失 敗,從而整個巡邏節點返回失敗,智能體的行為樹將結束巡邏行為,轉而執行其它行為,推 動游戲進程的發展。巡邏行為節點的第一順序節點是敵人檢測節點。這就涉及到了智能體的視覺、聽覺等感知系 統。它們被包括在節點的具體實現中。下面以視覺系統為例,簡單介紹了智能體視覺系統的 實現原理。在視覺系統中,假設坦克的視覺取決于其前方駕駛者的視覺。遍歷每一個B

9、方坦克,判斷能 否“看到”該坦克。對于每個坦克,首先用該坦克的transform減去被判斷坦克的transform, 得到一條方向射線。然后計算出該射線與坦克朝向射線的角度,如果該角度小于坦克視角的 一半,則認為這個坦克可以被偵測到,進而節點返回成功,行為樹進行下一步的動作。由于視覺和聽覺可以綜合使用,又例如坦克上可以裝配雷達等檢測裝備,這是一個動態變化 的過程。因此,這里的工作把視覺、聽覺、檢測裝備等統一歸為檢測節點,不再展開成單獨 的節點。其中的細節,由程序中的函數進一步完成計算工作。2、攻擊行為攻擊行為節點是取得勝利的一個重要節點,同時也是一個承上啟下的節點。在攻擊行為中, 首先要向敵人

10、移動,確保敵人在射程范圍中。由于移動是一個過程,所以起初移動相關的節 點會返回“執行中”,在完成自己當前的動作后,才會返回“成功”,從而進行下一步的動作。 在即將攻擊之前,智能體還將對戰場總體形勢有一定的了解,并且根據其性格進行不同的行 為。例如,可以把智能體分為三種性格:勇敢、一般、狡猾。其中勇敢的智能體只要彈藥充 足,任何情況下都會沖向敵人,進行射擊。而一般的智能體會判斷附近的隊友和視線范圍內 的B方坦克的勢力比是否等同,如果等同才會進行攻擊。而狡猾的智能體只有在附近A方 的勢力大于B方的勢力的時候才會展開攻擊,否則會試圖離開,去尋找隊友或者掩體。在具體的攻擊過程中,還需要進行瞄準,然后選

11、擇一個相對合理的射擊時間。在射擊時間過 后,返回父節點,重新進行新一輪的判斷和選擇。同時在其中加入了適當的延遲,從而保證 程序的穩定運行,同時更符合真實的情況。在射擊完成之后,還需要判斷自己是否需要裝填操作。值得注意的是,攻擊過程中也有可能 出現彈藥打完需要裝填的情況,但是和這里的情況有所不一致。在攻擊過程中如果遇到彈藥 用完的情況,會根據程序判斷,從而強行停止本次行為。而在射擊完成之后,會判斷彈藥是 否達到一個期望的量,如果沒有達到的話,即使還沒有用完彈藥,也會進行裝填動作。這是 行為樹的判斷節點的要求和所完成的動作,和前面一種情況有所不同。當敵人被摧毀后,攻 擊動作完成,從而移動至下一個目

12、標地點或者進入巡邏狀態。3、規避行為規避行為是一個衍生節點,可以在多處被調用。游戲中存在多個智能體,其中B方的智能體 它們共享了同一棵行為樹。在前面中提及到,可以根據敵人的性格產生可能不同的行為,這 樣做的話,就需要設計不同的行為樹。如果智能體的行為過多的時候,這樣的工作量將是巨 大的。根據行為樹的特性,將節點以邏輯進行合理的封裝,同時將子樹重復利用,避免大量 無效重復的勞動。規避行為并不是一個獨立的行為,它可以在行為樹中多次出現。例如,可能是因為A、B方 勢力不對等而產生的規避,也有可能是需要填充彈藥而產生的規避。因此,充分利用行為樹 子樹利用的特性,不把規避行為包含在攻擊行為中,而是將它獨

13、立出來,進行單獨的分析。進入規避行為節點后,首先應該判斷周圍的環境有沒有敵人。如果再進一步,還可以判斷敵 人的彈藥是否充足或者敵人是否處于開火的狀態。接下來,判斷是否已經處理安全的位置。 這兩個判斷節點任何一個滿足的時候將返回“真”,同時規避行為節點將返回,不再進行進 一步的動作。當前兩個判斷節點無法得到滿足的時候,將尋找附近的掩體。具體的尋找的方式可以對智能 體進行碰撞檢測,但本文的做法與前面類似,預先定義了掩體的序列,在需要掩體的時候將 遍歷該序列,找出遠離目前敵人的條件下相對來說離自己較近的掩體,執行規避操作。4、交互行為交互行為對于B方坦克來講,即“通知行為”,是智能體與其它智能體交互

14、的行為。對于A 方坦克來講,除了通知行為外,還包括了與玩家進行交互的過程。這個行為與上述三個行為均有不同,主要表現在:(1)交互行為可以存在和體現于各個行為之中,無法完全單獨用一棵公共的子樹描述與表 示。即不存在“交互行為節點”。(2)交互行為需要結合玩家的外部信息,即根據最小文本,與智能體的行為樹有機結合, 來實現干預。智能體在沒有干預條件的時候,也應當可以進行自主決策;但當有干預條件的 時候,不應當全盤無條件的接受,而是應該根據現有的運行狀態綜合判斷。通知節點主要表現在如下方面。首先,在巡邏行為中,發現敵人后,會向友方發出通知;其 次,在巡邏行為中,即自身沒有處于戰斗狀態時,會接受來自友方

15、的通知,進行支援等行為。 交互行為還將接受來自玩家語音提供的信息。例如在巡邏行為中,接受來自友方通知的節點 也將持續捕獲來自玩家語音信息的節點,如果產生了有效的語音信息,將會進一步匹配攻擊 或規避等行為,如果這個行為需要額外的名代詞信息的話,則會進一步獲得名代詞中提供的 地點等信息,進而觸發進一步的操作。交互行為很好的分布在了行為樹中,在符合一定條件的情況下,對友方發出通知,同時接受 友方的信息。智能體的行為樹建立1、智能體的行為樹確定了智能體的四種基本行為,且詳細描述了四種行為所包括的邏輯關系。通過分析每一種 行為的邏輯,可以很容易的建立每一種行為的子樹,作為一棵完整的行為樹,還需要將它們

16、組成起來。綜合以上的論述,本文將智能體的行為樹設計如下,其中為了表示方便,灰色 部分的子節點順序按照從右至左的方向依次排布,如下圖所示2、使用unity行為樹編輯Unity中,可以使用Behavior Designer (BD)很方便的來進行行為樹的可視化編輯等操作。 本系統中的行為樹的實際應用就采用了Behavior Designer。下面以一個實例來具體說明Behavior Designer的應用方式。一個典型的移動游戲邏輯可以在Behavior Designer中用如 下的行為樹表示。 BehavioraEntryiSeqilienEeIiWithin Sight聞awe Towards

17、圖中一個并行選擇節點連接了兩個順序節點。Behavior Designer采用拖拽的方式來編輯行為 樹。Behavior Designer除了大量內置節點以外,還可以通過繼承的方式來自定義自己的節點。 例如,其中行為節點繼承Actions,條件節點繼承自Conditional等。上圖中的Entry和Sequence為BD自帶的節點類型,其余兩個示意節點均為自定義節點。Within Sight節點 的目標是實現視覺,其核心代碼例舉如下:public class WithinSight : Conditional public override TaskStatus OnUpdate()(for

18、(int i = 0; i possibles.Length; +i)if (withinSight(possiblesi.transform,fieldOfViewAngle)target.Value = possibleTargetsi;return TaskStatus.Success;return TaskStatus.Failure;public bool withinSight(Transform targetTf, float fieldOfViewAngle)Vectors direction = targetTf.position - transform.position;return Vector3.Angle(direction, transform.forward) fieldOfView

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論