虛幻4自學筆記——基本從零開始搭建一個完整的關卡(包含AI)——第二篇
2018.01.31 開始學習AI了~
之前一篇的鏈接:
Einsphoton:虛幻4自學筆記——基本從零開始搭建一個完整的關卡(包含AI)由於之前那一篇寫的有點長了,為了方便閱讀,我又另起了一篇。
剛才角色的基本動作都做的差不多了,我們現在就開始學習AI相關的東西(雖然我剛才才想起來貌似角色只有動作,還沒做一些與其他角色或者地圖的交互功能,算了,無所謂,以後再補吧)
下面開始學習了,我先去官方文檔里系統學習一下AI的一些知識點,官方鏈接文檔:點擊閱讀
跟著一步一步做,你就會大致的了解AI的一些知識點。
雖然我知道一些更簡單的東西,但是我們還是系統學習一下吧,畢竟做這個關卡的AI不是很容易的。
另外我找了一個視頻,也在學習中。視頻連接:點擊觀看
2018.02.03 忙了好幾天,我又回來了,不過不是在搞AI
AI的事情要先放一下,一方面有一些概念沒有搞懂,另一方面,做AI之前,還真的需要把一些基礎邏輯做好,例如受擊動作,傷害邏輯等等。
所以我先研究了一下受擊動作……
這兩個自定義事件的作用是:①將SphereCollision的碰撞打開,並且設置只與Pawn才能Overlap;②將SphereCollision取消碰撞。
最終效果如下:
https://www.zhihu.com/video/943219871849390080但是還是有一些問題,這個這一套動作裡面,所有的受擊動作只有正面的,也就意味著,所有受擊動作的rootmotion都是向後退。
這個問題等我之後再想辦法處理一下吧……
2018.02.06 繼續處理受傷邏輯、受傷動作和死亡等邏輯
繼續上回沒有解決的問題,我換了一下思路這樣處理:
將RootMotion的受傷動作變為InPlace的受傷動作,這就意味著每次攻擊目標,目標只會在原地一動不動的擺出受傷動作。但是,我可以這樣處理:
每次角色的鍵攻擊到了一個Pawn時,判斷一下是不是自己,如果不是的話分三步走:讓對方播放一個受傷動作、同時將對方推走、以及對對方造成傷害。
在這裡需要注意的一點是(這個也是我Google很久才了解到的):對一個Pawn是不能使用add force和add impulse的。這是因為Pawn有膠囊體,有膠囊體的對象不能與物理屬性同時存在。所以如果想要推動一個Pawn,只能對他使用Launch Character。
在這裡需要進行以下處理:扣血、判斷如果角色生命值低於0時,將角色移除。
這裡開始劃重點了!!!!!
我本來是想讓角色在這裡播放死亡動畫的Montage的,但是發現每次角色倒地死亡之後又突然站起來了……
這個問題困擾了我兩天,我本來試圖讓角色在播放死亡Montage的最後一刻暫停Montage,但是根本沒有返回當前montage時長的函數……
最後我開竅了,如下
在角色的狀態機裡面加入死亡狀態,播放死亡動畫
我講一下原理,之前詐屍的原因是因為,播放死亡montage之後,又走回到了狀態機,所以角色又站了起來。所以,那乾脆就把死亡做成一種狀態就好了嘛~
https://www.zhihu.com/video/9441465775107194882018.02.08 接著回來關注AI
之前看過官方關於AI行為樹相關的文檔,也跟著做完了。現在腦子有點亂,正在整理思路……
不過,可能是官方文檔寫的比較老的緣故,我最近發現了一個更好用的東西,可以簡化行為樹的邏輯。
這個東西實際上是一個組件(Component),在角色Pawn裡面添加
這個組件自帶一套視野以及聽覺範圍系統,並且還有配套的響應系統。
於是可以簡單的實現進入視野→追蹤→攻擊這一套邏輯,如下:
但是別以為AI就這麼簡單,這麼點東西,實際想要做完一個完整的AI,還是需要行為樹的……
2018.02.09 繼續搞AI……
我又回來了,實際上我不知道下一次會是多久以後才能回來繼續更新我的進度。
實際上我已經有思路能夠把我當初設計好的AI全部實現,僅僅在AIPawn的BP中實現,而不涉及到行為樹(BehaviorTree)
但是我這個人要強,我想要用行為樹來實現那些AI邏輯。不過實際上行為樹涉及到的知識以及邏輯結構實在是太多太複雜了,以至於對我造成了智商壓制,所以我需要惡補一下……
2018.02.11 開始學習行為樹
昨天晚上和女朋友一起去她家過年了,她是南方人,雖然我已經在南方生活近10年了,這一次回南方還是感覺到特別特別冷,還是大連最舒服了……
晚上有足夠的時間繼續研究我朝思暮想的行為樹,有所收穫
首先講一下AI行為樹的一些結構性的概念。
AIPawn需要指定一個AI控制器(AIController);AIController來運行行為樹;AI行為樹需要指定一個小黑板(BlackBoard)來記錄AI的一些數據。所以你需要分別創建這幾樣東西。
其中行為樹是重中之重,其實它和狀態機比較類似,是AI的靈魂。它的作用則是實時的讓AI根據一系列的優先順序來執行行為策略。
行為樹裡面又包含了這樣幾個節點:
Root:根,貌似每一幀AI的行為都會從Root開始執行
Selector:行為樹的流程如果執行到了這個節點,則會從左到右依次執行其所有的子節點,直道某一個節點成功為止,則它返回成功。如果所有子節點都失敗了,則它返回失敗
Sequencer:行為樹的流程如果執行到了這個節點,則會從左到右依次執行其所有的子節點直到失敗為止。如果所有子節點都成功了,則它返回成功。
SimpleParallel:可以同時執行其子節點,我沒試過所以先不說這個……
在行為樹裡面還可以創建這樣幾個節點:
Task:顧名思義,就是執行任務的節點,在這裡可以編寫一些邏輯,來指使AI去做某些事情,例如MoveTo
Decorator:可以放到某一個節點裡面,作為條件檢測,如果返回成功了,才可以執行這個節點。
Service:這個概念不太好講,它的定位貌似就是Tick相關的可以實時的去做一些事情。比如索敵功能,每一幀都去檢測周圍是否有敵人,記在小黑板上…… ̄□ ̄||
於是我先嘗試地做了一個巡邏功能的AI,並且結合之前做的發現並攻擊的邏輯,組成了一個還過得去的AI邏輯。
今晚 到這了,有點冷,胳膊凍得發脹發酸……
2018.03.02 我回歸了……
這麼長時間沒更新,你們一定是以為我放棄了,實際上並沒有
並且,我已經做完了!
其實這篇文章熱度並不是很高,所以也……
感謝一直陪我學習的小夥伴們
實際上,只要沿著我留下的筆記你們一定也會做到的,甚至做的比我好
我給大家展示一下成果吧
https://www.zhihu.com/video/952898621885210624 https://www.zhihu.com/video/952898633885110272 https://www.zhihu.com/video/952917629107781632最後放一下下載鏈接:https://pan.baidu.com/s/1ggUjX8v?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0&traceid=
推薦閱讀: