UE4藍圖AI角色制作(六)之使用AI感知事件


12、使用AI感知事件

為了讓AI能夠對我們添加的視覺感官作出反應,我們需要在AI看見某個對象時,從感知系統中收集一些信息。為此我們將用到“On Target Perception Updated”事件,來捕獲並存儲AI感知的信息以及它感知信息的方式。最后,我們會在事件上設置一個斷點,以便逐步進行調試並查看捕獲到的信息。

讓我們首先設置AI角色的感知事件,從而獲取刺激源變量所包含的實用感知信息供AI使用。首先打開內容瀏覽器中的AI角色藍圖,找到AI感知組件的細節面板,找到“事件”分段。點擊“On Target Perception Updated”事件旁邊的加號,將它添加到事件圖表中。首先保存該事件中的Actor對象引用,這個變量包含AI角色感知到的Actor的引用,而這個引用會被我們頻繁的在這個藍圖中引用。左鍵點擊Actor對象引用並拖動,選擇“提升為變量”,將這個變量命名為“Perceived Actor”.現在我們來看一下這個事件提供的AI刺激源結構體。左鍵點擊“Stimulus”拖拽,選擇“中斷AIStimulus”,接着點擊結構體底部的箭頭,關注“中斷AIStimulus”的“successfully sense”這個布爾值。當AI感知到某個對象后,布爾值就會返回真,而無法感知到某個對象后,就會返回假。按住B鍵,左鍵點擊事件圖表,創建一個分支節點,將布爾值“successfully sense”連到分支節點的“條件”引腳上,將“Set Perceived Actor”的執行引腳連接到分支節點。

 

接下來,我們在分支后面添加一些邏輯,我們將把它與一個定時器相連,這個定時器會通過一個事件來清空AI感知到的對象。這是為了模擬AI在丟失對象一段時間后放棄對它進行跟蹤。我們首先創建一個自定義事件,並用它來清空感知對象變量。首先,添加自定義事件,將其命名為“Targetlost”,然后拖動分支節點的“假”引腳,然后輸入“set timer by event”選中。然后拖動“Targetlost”的引腳連到“set timer by event”的引腳。接下來,設置“set timer by event”的Time表示何時觸發這個事件,先設置成5秒鍾,不要勾選循環。

 

按住Alt鍵,找到“我的藍圖‘面板,將”PerceiveActor“變量拖放到事件圖表中,將” Targetlost “事件的執行引腳連到設置節點。

現在,我們需要分支在返回真后,消除我們在假時創建的定時器。如果不這么做,我們就有可能遇到這種情況:即使目標當前能夠被感知到,仍會觸發“TargetLost“事件。為此,我們可以使用”clear and invalidate timer by handle“這個函數,拖動分支節點的”真“值引腳連接至該函數。正如其名,這個函數需要我們提供一個定時器句柄以便使其失效。所幸”set timer by event“提供一個句柄類型的返回值,拖動”set timer by event“的返回值,選擇”提升為變量“,將它命名為”TargetLostTimer“。按住”Ctrl“鍵,在”我的藍圖“面板中選中”TargetLostTimer“,把它拖入事件圖表,然后將TargetLostTimer“句柄連到函數的”句柄“輸入。最后編譯。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM