TomLooman_ActionRoguelike_AssignmentFour
該專欄用于保存對(duì)TomLooman的ActionRoguelike項(xiàng)目的學(xué)習(xí)筆記,學(xué)習(xí)過程中的思考與記錄不一定準(zhǔn)確。
教程參考:https://github.com/tomlooman/ActionRoguelike
基于UE5.0的項(xiàng)目實(shí)現(xiàn):https://github.com/CarolBaggins2023/TomLooman_ActionRoguelike_Tutorial

2023_08_12
Assignment 4:當(dāng)bot處于低血量時(shí),逃跑并回血
?
給bot帶上屬性組件后,Assignment 4較容易完成。我們首先需要在行為樹中判斷bot是否處于低血量,和判斷玩家是否處于bot攻擊范圍內(nèi)相同,我們通過用Service對(duì)黑板中的bool變量賦值,完成這個(gè)功能。


我們繼承BTServiceNode創(chuàng)建C++類,同樣要覆蓋TickNode函數(shù),來實(shí)現(xiàn)間斷地檢查bot血量。

TickNode的實(shí)現(xiàn)如下,關(guān)鍵還是兩點(diǎn),訪問到bot和訪問到行為樹黑板。訪問到bot是為了從bot的屬性組件類獲得血量信息,訪問到行為樹黑板是為了用bot的血量信息給黑板中的變量賦值。

?
在通過Service給黑板中的bool變量賦值后,我們就可以用這個(gè)變量決定要不要執(zhí)行逃跑操作,在行為樹中,這就是一條以黑板節(jié)點(diǎn)開始的分支,我們將它放在最左側(cè)(好像代表優(yōu)先級(jí)最高),與攻擊類似,我們這個(gè)分支添加一個(gè)冷卻時(shí)間。

該分支主要是3步,運(yùn)行環(huán)境查詢,移動(dòng)到查詢結(jié)果位置,回血。
?
這里的環(huán)境查詢依據(jù)三個(gè)Test。
路徑長(zhǎng)度測(cè)試用來尋找一個(gè)可到達(dá)且距離bot較近的位置,距離查詢用來保持bot不離玩家太遠(yuǎn),TraceTest用來保證bot在那個(gè)位置不會(huì)受到玩家攻擊(bool match為true表示射線路徑上有hit才會(huì)通過篩選)。
三個(gè)測(cè)試中路徑長(zhǎng)度的測(cè)試權(quán)重最大(Scoring Factor)(權(quán)重為負(fù)僅表示距離越近分?jǐn)?shù)越大,而不是分?jǐn)?shù)為負(fù))。




?
回血任務(wù)節(jié)點(diǎn)類似于攻擊任務(wù)節(jié)點(diǎn),我們?cè)贑++中繼承BTTaskNode類,并覆蓋ExecuteTask函數(shù)。

該函數(shù)的實(shí)現(xiàn)類似于子彈造成傷害的函數(shù),都要用GetComponentByClass訪問Actor上的屬性組件類成員變量,并用ApplyHealthChange修改血量。不同的是,子彈造成傷害是通過Overlap函數(shù)的OtherActor參數(shù)訪問到Actor,而這個(gè)功能則是通過行為樹訪問使用行為樹的AI控制器,再通過AI控制器訪問被控Actor。
