[UE4]動畫藍圖的編輯全流程(Animation Blueprint)

Keyword: UE4、Animation Blueprin、Montage Slot、Character Blueprint

不知從從哪個版本開始,動畫藍圖的製作和老版本之間的差距有點大了,這裡做下筆記,以備不時之需。。

UE4版本:4.16

假設已經將模型和動作導入工程了,這裡使用官方模板項目的動作作為例子講解,只演示待機、跑步的控制邏輯,跳躍的可以看項目模板的動畫藍圖。

1,準備好動作和模型

2,新建一個一個Blend Space 1D

然後在跳出的菜單鍾選擇骨骼

3,打開Blend Space 1D鍾,分別將待機、行走、跑步三個動作拖拽到下方面板鍾

修改驅動屬性名為Speed,默認為None,這個屬性名為是後面編輯動畫藍圖使用的屬性名。

最終效果:

4,將`TargetWeightInterpolationSpeedPerSec`修改為5.0,修改這個值的原因是為了讓角色移動時的靜止和移動的過度更加自然

5,新建一個動畫藍圖(Animation Blueprin):

在彈出的菜單鍾選擇父類和骨骼,父類為:AnimInstance;骨骼就是當前模型的骨骼

6,打開動畫藍圖的EventGraph面板

然後再添加一個float屬性,名字為Speed,表示角色的即時速度

然後再編輯事件:Event Blueprint Update Animation

7,打開AnimGraph面板

新建一個State Machine

雙擊State Machine,進入裡面編輯。從Entry節點鐘拖拽並新建一個State:

將該State命名為Idel/Run

然後雙擊該State,進入裡面編輯:其中Speed,就是之前新建float屬性

最後再返回到最外層的AnimGraph面板,將StateMachine鏈接到Final Animation Pose上

8,新建角色藍圖Character Blueprint:

父類選擇工程中的C++ Character class:

然後打開角色藍圖,選中mesh

將Anim Class指定為之前創建的動畫藍圖:

將Skeletal Mesh指定為模型的骨骼:

如果默認的骨骼基準坐標、轉向和剛體大小、MovementComponent的默認方向不匹配,則需要編輯下Mesh的Transform

9,到此,動畫藍圖和角色藍天編輯完成,可以在C++中使用剛剛新建的角色藍圖。

ATopDownTestGameMode::ATopDownTestGameMode(){ // use our custom PlayerController class PlayerControllerClass = ATopDownTestPlayerController::StaticClass(); // set default pawn class to our Blueprinted character static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/TopDownCPP/Blueprints/NewBlueprint")); if (PlayerPawnBPClass.Class != NULL) { DefaultPawnClass = PlayerPawnBPClass.Class; }}

補充:播放Montage的Slot問題

播放montage動畫時,可能遇到播放動畫沒有反應的問題,例如,用C++的方式播放:

float ACharacter::PlayAnimMontage(class UAnimMontage* AnimMontage, float InPlayRate, FName StartSectionName)

原因:

可能時沒有指定Montage的Slot。

解決辦法:

1,打開Montage動畫,看下默認的Slot名字叫什麼

2,然後在動畫藍圖鐘的AnimGraph中,拉出一個Slot節點

然後在從該Slot中連接到Final Animation Pose中:

如果想修改該Slot節點的Slot名字,可以在屬性面變鍾修改:

如何在C++代碼中指定Montage的Slot名字,還沒研究過。但是可以通過AnimSequence動態創建一個Montage對象,並指定Slot名字:

USkeletalMeshComponent *Mesh = MyActor->FindComponentByClass<USkeletalMeshComponent>();if (Mesh){ UAnimInstance *AnimInst = Mesh->GetAnimInstance(); if (AnimInst) { UAnimMontage* Mtg = AnimInst->PlaySlotAnimationAsDynamicMontage(MyAnimSequence, TEXT("MySlotName"), 0.1f, 0.1f, 1.0f, 30.0f); }}

推薦閱讀:

TAG:虛幻4遊戲引擎 | 虛幻引擎 | UnrealEngine4 |