09_P83~P88TheAnimationBlueprint
83the Animation Blueprint動畫藍圖
Breathing Life into echo
給角色創(chuàng)建動畫藍圖
一共是兩點
1、我們需要在動畫藍圖中獲取角色的移動速度
2、我們需要在動畫藍圖中設置一個狀態(tài)機 static machine,狀態(tài)機里面,通過判斷移動速度,設置idle和run兩種狀態(tài)的切換
1、動畫藍圖創(chuàng)建和角色數(shù)據(jù)初始化
新建一個動畫藍圖

進入AnimGraph,創(chuàng)建一個狀態(tài)機state machine,命名為Ground Locomotion


然后我們事件圖表中,初始化動畫,需要獲取角色bp_testCharacter的角色移動信息charactermovement
首先創(chuàng)建事件節(jié)點

創(chuàng)建一個類型為BP_TestCharacter的變量

通過“嘗試獲取pawn擁有者,轉換為bp_testCharacter類型,賦值給新建的character變量,
然后從character中獲取角色移動組件character movement的信息,并將其結果提升為變量
整體藍圖如下

接著我們通過”事件藍圖更新動畫“事件 獲取character movement中,移動速度velocity的信息,這里我們只需要獲得xy軸上的速度信息

獲取XY方向上 向量的長度(也就是速度)

將獲得的結果類型提升為變量
整體藍圖如下

然后我們回到狀態(tài)機這里
雙擊狀態(tài)機
新建兩個狀態(tài)idle 、 run,并關聯(lián)run至idle的關系

進入idle 和run 添加動畫


然后進入兩個過渡規(guī)則,通過GroundSpeed添加判斷條件



最后編譯保存 執(zhí)行一下看看結果,角色就能在地圖中“跑起來”了
并且在速度為0和不為0的時候有各自的動畫表現(xiàn)
84?the anim instanceanim實例
the c++ class for the animation blueprint動畫藍圖的c++類
創(chuàng)建一個AnimInstance類

刪除原有動畫藍圖中的節(jié)點和變量
在動畫藍圖的類設置里面 修改父類為創(chuàng)建的這個類

并在動畫狀態(tài)機中,替換之前的變量GroundSpeed
85Jumping跳
Creating Action Mappings創(chuàng)建動作映射
藍圖實現(xiàn):創(chuàng)建一個操作映射

在character藍圖 bp_testCharactor中,輸入jump 找到jump的操作事件
并創(chuàng)建一個jump函數(shù)


C++實現(xiàn):
依然需要在項目設置中創(chuàng)建一個操作映射
然后在SetupPlayerInputComponent中綁定jump操作,并使用ACharacter類中的Jump方法
86Jump Animations跳的動畫
Adding Jump States添加跳轉狀態(tài)
進入動畫藍圖中,在AnimGraph中,斷開原來GroundLocomotion的鏈接
從GroundLocomotion引出cached poses,創(chuàng)建一個狀態(tài)緩存,命名為GroundLocomotion


然后重新創(chuàng)建一個狀態(tài)機 MainMachine

進入之后添加節(jié)點

用之前C++創(chuàng)建的isFalling判斷是否在空中
OnGround->InAir ?

InAir->Land

Land->OnGround

添加判斷語句,獲取剩余的跳躍動畫時間,如果移動速度大于0,則立刻切換到OnGround狀態(tài)

這里的循環(huán)動畫記得在跳躍狀態(tài)時,需要關掉

從Land到OnGround的規(guī)則屬性上,需要勾選這個,這樣才能在落地動作完成后,自動過渡到OnGround,否則就會一直播放落地動作

87Inverse Kinematics逆運動學
Fine-Truning our Character's Animations微調我們的角色動畫
太難了····
88小結