虛幻4自學筆記——基本從零開始搭建一個完整的關卡(包含AI)——第二篇

2018.01.31 開始學習AI了~

之前一篇的鏈接:

Einsphoton:虛幻4自學筆記——基本從零開始搭建一個完整的關卡(包含AI)?

zhuanlan.zhihu.com圖標

由於之前那一篇寫的有點長了,為了方便閱讀,我又另起了一篇。

剛才角色的基本動作都做的差不多了,我們現在就開始學習AI相關的東西(雖然我剛才才想起來貌似角色只有動作,還沒做一些與其他角色或者地圖的交互功能,算了,無所謂,以後再補吧)

下面開始學習了,我先去官方文檔里系統學習一下AI的一些知識點,官方鏈接文檔:點擊閱讀

跟著一步一步做,你就會大致的了解AI的一些知識點。

雖然我知道一些更簡單的東西,但是我們還是系統學習一下吧,畢竟做這個關卡的AI不是很容易的。

另外我找了一個視頻,也在學習中。視頻連接:點擊觀看


2018.02.03 忙了好幾天,我又回來了,不過不是在搞AI

AI的事情要先放一下,一方面有一些概念沒有搞懂,另一方面,做AI之前,還真的需要把一些基礎邏輯做好,例如受擊動作,傷害邏輯等等。

所以我先研究了一下受擊動作……

在角色身上綁了一個SphereCollision組件,用來判斷是否與其他東西Overlap

寫了兩個自定義事件

這兩個自定義事件的作用是:①將SphereCollision的碰撞打開,並且設置只與Pawn才能Overlap;②將SphereCollision取消碰撞。

當發生Overlap的時候,檢測一下是不是我想要的那個Character,對其播放受擊動作,將來還需要在這裡處理傷害。

將每一個攻擊動作在剛要揮劍的時候插入一個Notify,用來調用DealDamage事件

在相應的Notify事件裡面,調用之前編寫好的自定義事件

最終效果如下:

https://www.zhihu.com/video/943219871849390080

但是還是有一些問題,這個這一套動作裡面,所有的受擊動作只有正面的,也就意味著,所有受擊動作的rootmotion都是向後退。

這個問題等我之後再想辦法處理一下吧……


2018.02.06 繼續處理受傷邏輯、受傷動作和死亡等邏輯

繼續上回沒有解決的問題,我換了一下思路這樣處理:

將RootMotion的受傷動作變為InPlace的受傷動作,這就意味著每次攻擊目標,目標只會在原地一動不動的擺出受傷動作。但是,我可以這樣處理:

綁在角色劍上的碰撞體觸發了Overlap事件

每次角色的鍵攻擊到了一個Pawn時,判斷一下是不是自己,如果不是的話分三步走:讓對方播放一個受傷動作、同時將對方推走、以及對對方造成傷害。

在這裡需要注意的一點是(這個也是我Google很久才了解到的):對一個Pawn是不能使用add force和add impulse的。這是因為Pawn有膠囊體,有膠囊體的對象不能與物理屬性同時存在。所以如果想要推動一個Pawn,只能對他使用Launch Character。

角色接收傷害的事件

在這裡需要進行以下處理:扣血、判斷如果角色生命值低於0時,將角色移除。

這裡開始劃重點了!!!!!

我本來是想讓角色在這裡播放死亡動畫的Montage的,但是發現每次角色倒地死亡之後又突然站起來了……

這個問題困擾了我兩天,我本來試圖讓角色在播放死亡Montage的最後一刻暫停Montage,但是根本沒有返回當前montage時長的函數……

最後我開竅了,如下

狀態機

在角色的狀態機裡面加入死亡狀態,播放死亡動畫

我講一下原理,之前詐屍的原因是因為,播放死亡montage之後,又走回到了狀態機,所以角色又站了起來。所以,那乾脆就把死亡做成一種狀態就好了嘛~

https://www.zhihu.com/video/944146577510719488


2018.02.08 接著回來關注AI

之前看過官方關於AI行為樹相關的文檔,也跟著做完了。現在腦子有點亂,正在整理思路……

不過,可能是官方文檔寫的比較老的緣故,我最近發現了一個更好用的東西,可以簡化行為樹的邏輯。

這個東西實際上是一個組件(Component),在角色Pawn裡面添加

PawnSensing組件

這個組件自帶一套視野以及聽覺範圍系統,並且還有配套的響應系統。

於是可以簡單的實現進入視野→追蹤→攻擊這一套邏輯,如下:

但是別以為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邏輯。

為了使用行為樹來製作AI,我創建了這些資源

在AIPawn中綁定剛才創建好的AIController

當這個AIController開始控制某一個AI的時候,判斷一下是不是我想要的AI,然後執行我剛才創建的行為樹

編寫了一個比較簡單的一套行為,目前只有第一個Selector左邊的行為樹枝起作用。第一個Task決定來到底選擇哪個點來作為巡邏目標;第二個Task則讓AI移動過去。

BTTask_TargetForPatrol的具體邏輯。首先我在AIPawn中創建了一個TargetPoint的引用數組變數,到時候可以配置AI的具體巡邏點。然後這裡來遍曆數組,然後記錄小黑板。

今晚 到這了,有點冷,胳膊凍得發脹發酸……


2018.03.02 我回歸了……

這麼長時間沒更新,你們一定是以為我放棄了,實際上並沒有

並且,我已經做完了!

其實這篇文章熱度並不是很高,所以也……

感謝一直陪我學習的小夥伴們

實際上,只要沿著我留下的筆記你們一定也會做到的,甚至做的比我好

我給大家展示一下成果吧

https://www.zhihu.com/video/952898621885210624 https://www.zhihu.com/video/952898633885110272 https://www.zhihu.com/video/952917629107781632

最後放一下下載鏈接:pan.baidu.com/s/1ggUjX8

推薦閱讀:

TAG:虛幻4遊戲引擎 | 遊戲關卡設計 | AI技術 |