Blender To UE5 塔防 002

一個(gè)半小時(shí)的時(shí)間,知識(shí)量太大了,對(duì)于我這個(gè)小白來(lái),腦子已經(jīng)完全飽和。
實(shí)例,學(xué)起來(lái)優(yōu)點(diǎn)就是有意思。驅(qū)動(dòng)力強(qiáng),但是費(fèi)腦子,發(fā)型也往強(qiáng)者這邊更近一步。

本節(jié)課目標(biāo):基礎(chǔ)的防御塔藍(lán)圖搭建,防御塔具有攻擊能力。
----------給Actor塔添加一個(gè)spawn動(dòng)畫(huà)并嘗試炮筒旋轉(zhuǎn)和Fire------------------------------
-----------------一、給Actor塔添加一個(gè)spawn動(dòng)畫(huà)---------------------
整體思路:
- 首先創(chuàng)建一個(gè)Actor塔的父類(lèi)
- 再創(chuàng)建一個(gè)動(dòng)畫(huà)藍(lán)圖類(lèi),可以播放動(dòng)畫(huà)序列
- 在塔的父類(lèi)藍(lán)圖中設(shè)置條件,和藍(lán)圖動(dòng)畫(huà)之間通信,控制狀態(tài)機(jī),實(shí)現(xiàn)播放哪個(gè)動(dòng)畫(huà)序列;
- 幾個(gè)狀態(tài)分析
- start
- spawn
- idle
- Idle 就是一幀動(dòng)畫(huà),也沒(méi)有呼吸,所以這里完全可以不用狀態(tài)機(jī),直接序列動(dòng)畫(huà)播放spawn。但是,UP可能考慮的是讓課程內(nèi)容更豐富。
具體步驟:
創(chuàng)建一個(gè)Acor命名為BP_Defence_Patent,
- 添加一個(gè)骨骼體組件,命名為SpawnMesh
- 在組件細(xì)節(jié)面板中,添加骨骼;
- 并把Actor放到關(guān)卡中,沒(méi)有spawn動(dòng)畫(huà)
- 下面給Actor添加spawn動(dòng)畫(huà)
在Animation文件夾種創(chuàng)建Anim(動(dòng)畫(huà)藍(lán)圖)
- 添加TowerBaseSK_Skeleton
- 命名為ABP_Tower
在AnimGraph中,添加一個(gè)動(dòng)畫(huà)序列,看一下效果。
沒(méi)有反應(yīng),我們還需要給藍(lán)圖中指定播放哪個(gè)藍(lán)圖動(dòng)畫(huà)。
指定完成,就可以正常播放動(dòng)畫(huà)了。
但是,對(duì)于Actor(ABP_Tower)來(lái)說(shuō),有很多動(dòng)畫(huà),例如:攻擊時(shí)候的攻擊動(dòng)畫(huà)、Idle動(dòng)畫(huà)等。
所以,先建一個(gè)變量來(lái)告訴動(dòng)畫(huà)藍(lán)圖Spawn動(dòng)畫(huà)是否播放完成,這樣狀態(tài)機(jī)就可以依據(jù)來(lái)判斷播放哪個(gè)動(dòng)畫(huà)了。
創(chuàng)建布爾變量IsSpawned?
創(chuàng)建一個(gè)狀態(tài)機(jī),命名為T(mén)ower State Machine;
- 狀態(tài)機(jī)可以根據(jù)條件來(lái)播放哪個(gè)動(dòng)畫(huà)序列。
- 三個(gè)狀態(tài),Start,Spawn,Idle
- 在三個(gè)狀態(tài)中,添加動(dòng)畫(huà)序列
下面,就開(kāi)始設(shè)置條件:
- 在動(dòng)畫(huà)藍(lán)ABP_Tower圖中,獲取Actor;
- cast to 塔的父類(lèi)(BP_Defence_Patent)
- 得到藍(lán)圖中的變量來(lái)判斷spawn的動(dòng)畫(huà)是否播放完成
- 如果完成,則進(jìn)入idle
- 沒(méi)有,則繼續(xù)播放Spawn動(dòng)畫(huà)
- spawn到idle規(guī)則
- 利用的一個(gè)剩余時(shí)間(比率)的節(jié)點(diǎn)

----------------------------------二、實(shí)現(xiàn)炮筒旋轉(zhuǎn)動(dòng)畫(huà)--------------------
1、攻擊時(shí)候的炮基,
- Spawn完成之后,切換可視性后隱藏;
- TowerBase設(shè)置為隱藏,切換可視性后顯示;
2、攻擊時(shí)候的炮筒,
- 添加TowerBaseCanno骨骼網(wǎng)格體
- 對(duì)于骨骼網(wǎng)格體來(lái)說(shuō)很重要的一件事別忘了:
- 動(dòng)畫(huà)模式
- 動(dòng)畫(huà)類(lèi)
- 也設(shè)置為隱藏,切換可視性后顯示;
- 然后添加蒙太奇
3、實(shí)現(xiàn)炮筒單獨(dú)旋轉(zhuǎn)的藍(lán)圖設(shè)置
- 添加一個(gè)時(shí)間軸?25:58?
- 長(zhǎng)度設(shè)置為1;
- 軌道命名為T(mén)urnRate;
----------------------------------三、實(shí)現(xiàn)開(kāi)火的動(dòng)畫(huà)--------------------
開(kāi)關(guān)動(dòng)畫(huà)的重復(fù)的動(dòng)作,所以使用蒙太奇。
問(wèn)題來(lái)了,如何創(chuàng)建蒙太奇,使用蒙太奇;
1、創(chuàng)建蒙太奇
- 視頻中直接選擇一個(gè)動(dòng)畫(huà)序列
- 右鍵——?jiǎng)?chuàng)建——?jiǎng)?chuàng)建蒙太奇
- 并改名為T(mén)ower BaseAnimAtk_Montage
2、播放蒙太奇的節(jié)點(diǎn)
- 骨骼——炮筒
- 資產(chǎn)選擇——?jiǎng)倓倓?chuàng)建蒙太奇
3、蒙太奇的調(diào)用播放是動(dòng)畫(huà)藍(lán)圖中設(shè)置;
- slot搜索節(jié)點(diǎn)
- 相對(duì)于在動(dòng)畫(huà)藍(lán)圖中放置了一個(gè)插槽(slot)
- 然后,如果Actor藍(lán)圖中就利用節(jié)點(diǎn)來(lái)控制播放了(步驟2)
- 1、對(duì)于骨骼網(wǎng)格體來(lái)說(shuō)很重要的一件事別忘了:
- 動(dòng)畫(huà)模式
- 動(dòng)畫(huà)類(lèi)
- 2、在動(dòng)畫(huà)藍(lán)圖中slot節(jié)點(diǎn)
----------下面讓Tower搜索敵人并鑒別出離著最近的敵人-----------------------------
先用藍(lán)圖做,后面會(huì)用行為樹(shù)做!
創(chuàng)建一個(gè)Character作為敵人,命名為BP_TDEnemy_Parent
- 添加骨骼SK_Mannequin
- 添加動(dòng)畫(huà)藍(lán)圖
- 搜索敵人。在BP_Defence_Patent中藍(lán)圖中
- 添加對(duì)Object進(jìn)行多球體追蹤
- 創(chuàng)建一個(gè)浮點(diǎn)變量AtickDistance,1000;
- 對(duì)象類(lèi)型
- 是之前,設(shè)置好的
- ?39:30?



進(jìn)入敵人的藍(lán)圖,設(shè)置膠囊碰撞設(shè)置:
- 碰撞預(yù)設(shè)——Custom;
- 對(duì)象類(lèi)型——Enemy;(設(shè)置好的)
- 碰撞相應(yīng)設(shè)置:

在BP_Defence_Patent中繼續(xù)編輯藍(lán)圖
-------------獲取離著最近的敵人---------------------------
一、判斷碰撞是否成功,成功的放置到數(shù)組中
- 首先利用節(jié)點(diǎn)多球體追蹤判斷是否成功
- 成功的話,就For Each Loop
- cast to BP_TDEnemy_Parent
- Add Larry
- 提升變量,命名為EnemyFindArray
二、判斷哪個(gè)敵人離著目的地最近
準(zhǔn)備工作:
- 創(chuàng)建一個(gè)函數(shù),命名為:GetEnemyNearToBase;
- 創(chuàng)建一個(gè)Acor——Base,也就是敵人的目的地;
- 在BP_Defence_Patent藍(lán)圖中獲取Base,得到Base的引用?47:07?

變量歸類(lèi),這技巧太實(shí)用??梢赞坜圩兞?/strong>


所有準(zhǔn)備工作做好之后,現(xiàn)在就可以判斷哪個(gè)敵人離著最近了
根據(jù)的敵人的位置,來(lái)讓炮筒旋轉(zhuǎn),朝向敵人
讓敵人AI移動(dòng)
- 用到節(jié)點(diǎn)AI MoveTo
- 追蹤對(duì)象,利用節(jié)點(diǎn)獲取類(lèi)的所有Actor,獲取到BPBase(目的地的actor)
- ue5地圖自帶導(dǎo)航,按鍵P就可以看到綠色的導(dǎo)航區(qū)域
- 如果沒(méi)有話,可以自己添加NavMeshBoundsVolume

修改移動(dòng)速度
可能就是執(zhí)行一次,所以設(shè)置一個(gè)條件,只要沒(méi)有得到有效值就一直執(zhí)行函數(shù)Search
為啥要delay時(shí)間呢?這樣的話,再次執(zhí)行search的時(shí)候,就會(huì)在0.2s之后又執(zhí)行一次。
但是在這次又設(shè)置一個(gè)條件,這個(gè)條件設(shè)置錯(cuò)誤了,up主在后面視頻也進(jìn)行了修改。
判斷數(shù)組的長(zhǎng)度應(yīng)該>=0,而不是判斷是否==0!
后面學(xué)習(xí)up如何debug,借鑒一下思路?。?/p>
讓炮筒持續(xù)瞄準(zhǔn)敵人?。?/p>
set time by event提升為變量,這個(gè)變量類(lèi)型為定時(shí)器柄;
作用是啥呢?結(jié)合后面的內(nèi)容,猜想,這個(gè)變量就是這個(gè)定時(shí)器的引用。
新建一個(gè)變量,屬于游戲中的變量,
- 再Attack函數(shù)中,設(shè)置IsAttacking為真;
- 然后作為Aim(瞄準(zhǔn)事件)的條件
但是,這變量的作用是什么呢?
- 在敵人的藍(lán)圖中,新建一個(gè)變量I是Dead?
- 來(lái)判斷敵人是否死亡,
- 如果死亡,重新Search;
- 如果死亡,就清除定時(shí)器,也就是不再瞄準(zhǔn)和繼續(xù)攻擊;
- AimHandle(定時(shí)器手柄)這個(gè)定時(shí)器的引用。