接上一節
6、 尋路網格體代理
通過允許配置多個“代理”,虛幻引擎使得使用者能夠輕鬆為大小各異的AI建立尋路網格體。首先,選中世界大綱檢視中的“RecastNavMesh”,找到細節皮膚中的“生成”分段,如下圖所示。這裡的幾個選項都與代理相關,分別是“代理半徑”(Agent radius)、“代理高度”、“代理最大高度”、“代理最大斜面”和“代理最大步高”。預設的代理半徑是35,而這個值應該和AI寬度相同。代理高度應該和AI高度相同。
在專案設定中,有一個選項循序我們新增多種型別的代理,並且每一種都能定義不同的引數。首先開啟專案設定,然後找到“引擎-導航系統”,如下圖所示,在最底層有一個“agent”分段,其中一個選項是“支援的代理”,它實際上是一個陣列,我們可以向裡面新增一些元素,每個元素都包括“代理半徑”(Agent radius)、“代理高度”、跳、游泳等選項,我們能夠為不同的AI設定不同的代理,配置不同的導航網格體。
7、 尋路網格體
建立完尋路網格體後,我們將為AI角色藍圖新增功能,讓AI隨機移動到附近某個位置,等待片刻,然後移動到另一個位置,迴圈往復。首先,要在角色藍圖中新建一個自定義事件,並讓它包含隨機漫遊邏輯,然後使用另一個函式在遊戲執行中時反覆呼叫自定義事件。
首先在內容瀏覽器中開啟AI藍圖,在事件圖表中,右擊並搜尋“自定義事件”,將新的自定義事件命名為“random wander”.
拖動這個自定義事件的執行引腳,然後搜尋“simple move to location”,新增到圖表中,其需要兩個引數,一個是角色使用的控制器,一個是以向量表示的目標位置。先設定角色使用的控制器,右擊搜尋“get conroller”,點選後連線至自定義事件;接下來右擊搜尋“get random reachable point in radius”,點選應用。這個函式有許多引數,我們只用其中部分。其中,“orgin”表示它移動的起點,“radius”定義了起點周圍的移動距離。在這裡,我們的起點就是第三人稱AI的起點位置,我們可以使用“get actor location”函式,右擊搜尋得到該函式,預設下,該函式返回值就是當前目標的位置,並將其連線到“orgin”。然後根據自己需求設定半徑“radius”。然後將“get random reachable point in radius”連線到“simple move to location”的“goal”中。現在,我們的隨機漫遊事件就完成了。
接下來需要再建立一個事件·來呼叫它,否則它不會自動執行。右鍵找到“beginplay”,拖動“beginplay”的引腳,然後搜尋輸入“set timer by event”。關於這個函式,首先需要告訴它觸發哪個事件。為此,我們可以將“random wander”事件的委託輸出引腳,連到“set timer by event”的事件輸入上。接下來,我們需要指定這個事件何時被觸發,可以將時間值設定為1.5。這意味著每過1.5秒,關聯的事件就會被觸發。為了讓它能夠迴圈觸發,勾選“set timer by event”的迴圈選項。“set timer by event”的返回值是一個定時器控制程式碼結構。我們不需要使用它,因為不需要在其它地方用到定時器。這意味著我們無需設定這個輸出。編譯後,我們需要檢測這個藍圖是否在遊戲中有效。