邁布-----UE4AI自動巡邏與攻擊


這個行為樹給我惡心的都想吐,我用的是4.24,跟着官網做達不到那個效果,跟着視頻做也達不到那個效果,跟我弄的非常不耐煩,最后終於在今天整出來了。有的地方用了一下我自己的邏輯。//諸位依靠教程的,一定得自己動腦思考,鍛煉獨立編碼的能力,不要“過度”依賴教程,要學會舉一反三

我用的是第三人稱模板

OK,我來給你從1講到8,其中一個沒啥用

首先第一個,是行為樹里面的一個服務,

ps:若不知道行為樹服務是什么的話參考官方文檔:https://docs.unrealengine.com/zhCN/Engine/ArtificialIntelligence/BehaviorTrees/BehaviorTreesOverview/index.html

里面的邏輯我當你說一下,獲取玩家坐標,AI坐標,玩家到AI坐標相減畫一條線,最后合一,好像叫什么Nor......,我們就記他Nor,這個是合一向量的,

之后去前方坐標,Forward,這兩個東東點乘,也就是dot,然后去反余弦值,判定,是否在55°角之內,設一個if分支

如果是,則說明看見玩家了,采用追逐(Attack),如果沒有,采用不追逐(Idle)

ps:若不知道點乘:https://blog.csdn.net/kebu12345678/article/details/80724336    這個博客可以參考一下。

第二個,黑板,節點:TargetActor,Object類型,底下要設為Actor;枚舉類型:目的是定義AI攻擊還是不攻擊(巡邏),兩種狀態,Idle,Attack,均為枚舉類型

那么第一個藍圖,行為樹服務藍圖就可以設置黑板值了,藍圖SetBlackBoardASObject,新建一個變量,類型為BlackBoardKey,名字TagetActor,把它和藍圖SetBlackBoardASObject鍵值連上,還有個Object就是GetPlayerCharacter,我是憑記憶寫的不一定正確,把它和Object連上。

設置枚舉,SetBlackBoardAsEnum,枚舉在黑板上確認使用上圖第5個,也就是AI_Enum,枚舉選項選擇那個Attack,不是idle。因為已經發現玩家了,應該是攻擊

忘了說了第一個一開始調用的是 事件 Tick AI,我是憑記憶寫的,每秒更新AI,

在if那個false分支上,重復上面的,調用Idle,好像還有個事件,再次調用AI,好像是A打頭的,事件  A......   AI......

在那里再調用一遍SetBlackBoardAsEnum 值為Idil

在這里設置速度,因為我是默寫,所以把思路寫下來:

首先先GetMovementComponent,castToMoveComponentCharacter,SetMaxWalkSpeed,

 

我頭疼就頭疼在這兒,因為我一設置單獨的速度task,或者函數,尋路就不成功,所以我把它給設置到服務里了。

這個是行為樹,我追逐玩家和巡邏的行為樹,

第4個,控制藍圖,一定要把AIcharacter類里面的AI控制改為這個我們新建的AI控制,我這個是AI_Controller,設置的話在組件圖標中最上面的,細節面板應該能看到,第8個就是我的character,我把第三人稱那個給拷貝了一份,然后清空里面的事件。攝像機和彈簧臂我都給刪了。

控件藍圖需要寫一個EventBegin,就是默認三個事件中的最上面的那個,讓RunBehaviourTree與他連接。

別忘了把BehaviourTree設置為我們新建的Tree,我這個是AI_BT,藍圖節點有選項的,選擇我們建的藍圖就可以了

第6個巡邏,我不寫了,太累了,上圖講一下重點。

 

 

主要用到MoveToLocation,移動到坐標,下面的三個是檢測移動成沒成功,成功后,FinishExcute結束事件,我覺得沒有必要,直接一個結束事件得了

ReceiveExcuteAI,這個節點是此任務運行時,就是行為樹指到到你這個任務時出發的,上面4個是設置速度的,那個GetRandomLocation...的是獲取隨機坐標,

我直接用ActorLocation。

上面那個樹節點MoveTo是移動到,選擇器上的裝飾器設置如下:

開發一定要自己動腦,不要“過度”依賴教程

后記:Nav...mesh打頭的在編輯器界面左面搜索,這個是路徑追蹤,讓它覆蓋游戲中的所有物體,然后按下P鍵即可設置完畢,設置完是綠色的。


免責聲明!

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



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