接上一節
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”的返回值是一個定時器句柄結構。我們不需要使用它,因為不需要在其它地方用到定時器。這意味着我們無需設置這個輸出。編譯后,我們需要檢測這個藍圖是否在游戲中有效。