UE學(xué)習(xí)記錄:EQS
EQS提供給行為樹(shù)使用,可以配合尋路網(wǎng)格(也可以不依賴尋路網(wǎng)格進(jìn)行工作)幫助AI進(jìn)行位置信息的篩選,選出最優(yōu)檢測(cè)點(diǎn)為行為樹(shù)的黑板更新關(guān)鍵幀。
在編輯器偏好設(shè)置搜索EQS,將其勾選上并重啟編輯器。內(nèi)容->右鍵->人工智能->環(huán)境查詢,命名為EnvQuery_FindNearbyLocation,在根下添加一個(gè)Donut生成器,并添加Distance和Trace測(cè)試,作如下設(shè)置,對(duì)于細(xì)節(jié),生成器可以對(duì)生成檢測(cè)點(diǎn)的范圍,數(shù)量,方向進(jìn)行調(diào)整;Distance測(cè)試是以距離作為評(píng)分依據(jù),對(duì)生成器生成的點(diǎn)進(jìn)行評(píng)分,“到此距離”就是生成的檢測(cè)點(diǎn)與此設(shè)置的距離,這里選擇自己創(chuàng)建的藍(lán)圖QueryContext_TargetActor,父類為EnvQueryContext_BlueprintBase,它提供了玩家的位置,過(guò)濾類型改成最小,浮點(diǎn)值改成了500,因?yàn)槲覀兿M嚯x500cm外的位置才會(huì)被考慮進(jìn)評(píng)分,這樣AI就不會(huì)走到玩家臉上才開(kāi)始攻擊;Trace測(cè)試解決了兩個(gè)目標(biāo)之間有障礙物的問(wèn)題,比如AI會(huì)對(duì)隔著墻對(duì)玩家攻擊。


然后到行為樹(shù)下添加EQS,細(xì)節(jié)中的黑板鍵設(shè)置為MoveToLocation,查詢模板選擇剛才創(chuàng)建的Query_FindNearbyLocation,這樣行為樹(shù)執(zhí)行EQS時(shí),篩選出來(lái)的值賦給MoveToLocation,在運(yùn)行模式中可以調(diào)整其隨機(jī)性,然后把MoveToPlayer中的黑板鍵改為MoveToLocation,AI就會(huì)走到MoveToLocation的位置。


想讓AI在發(fā)現(xiàn)玩家時(shí)再追蹤玩家,可以用到PawnSensingComponent。思路:先到RgAICharacter.h聲明UPawnSensingComponent組件,在cpp文件里將自定義的函數(shù)綁定到委托OnSeePawn,這樣當(dāng)AI角色看到Pawn類型的對(duì)象后,就會(huì)調(diào)用綁定的自定義函數(shù),在自定義函數(shù)里將Pawn傳給黑板鍵TargetActor。
在AI的藍(lán)圖中的PawnSensingComp組件中可以調(diào)整AI的視覺(jué)范圍,視覺(jué)角度,聽(tīng)覺(jué)范圍等。