這個行爲樹給我噁心的都想吐,我用的是4.24,跟着官網作達不到那個效果,跟着視頻作也達不到那個效果,跟我弄的很是不耐煩,最後終於在今天整出來了。有的地方用了一下我本身的邏輯。//諸位依靠教程的,必定得本身動腦思考,鍛鍊獨立編碼的能力,不要「過分」依賴教程,要學會觸類旁通html
我用的是第三人稱模板dom
OK,我來給你從1講到8,其中一個沒啥用編輯器
首先第一個,是行爲樹裏面的一個服務,函數
ps:若不知道行爲樹服務是什麼的話參考官方文檔:https://docs.unrealengine.com/zhCN/Engine/ArtificialIntelligence/BehaviorTrees/BehaviorTreesOverview/index.html編碼
裏面的邏輯我當你說一下,獲取玩家座標,AI座標,玩家到AI座標相減畫一條線,最後合一,好像叫什麼Nor......,咱們就記他Nor,這個是合一貫量的,.net
以後去前方座標,Forward,這兩個東東點乘,也就是dot,而後去反餘弦值,斷定,是否在55°角以內,設一個if分支3d
若是是,則說明看見玩家了,採用追逐(Attack),若是沒有,採用不追逐(Idle)視頻
ps:若不知道點乘:https://blog.csdn.net/kebu12345678/article/details/80724336 這個博客能夠參考一下。htm
第二個,黑板,節點:TargetActor,Object類型,底下要設爲Actor;枚舉類型:目的是定義AI攻擊仍是不攻擊(巡邏),兩種狀態,Idle,Attack,均爲枚舉類型blog
那麼第一個藍圖,行爲樹服務藍圖就能夠設置黑板值了,藍圖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鍵便可設置完畢,設置完是綠色的。