[UE4]动画蓝图的编辑全流程(Animation Blueprint)

[UE4]动画蓝图的编辑全流程(Animation Blueprint)

https://zhuanlan.zhihu.com/p/27448628

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

不知从从哪个版本开始,动画蓝图的制作和老版本之间的差距有点大了,这里做下笔记,以备不时之需。。

UE4版本:4.16

假设已经将模型和动作导入工程了,这里使用官方模板项目的动作作为例子讲解,只演示待机、跑步的控制逻辑,跳跃的可以看项目模板的动画蓝图。

1,准备好动作和模型

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第1张图片

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

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第2张图片

然后在跳出的菜单钟选择骨骼

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第3张图片

3,打开Blend Space 1D钟,分别将待机、行走、跑步三个动作拖拽到下方面板钟

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第4张图片

修改驱动属性名为Speed,默认为None,这个属性名为是后面编辑动画蓝图使用的属性名。

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第5张图片

最终效果:

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第6张图片

4,将`TargetWeightInterpolationSpeedPerSec`修改为5.0,修改这个值的原因是为了让角色移动时的静止和移动的过度更加自然

5,新建一个动画蓝图(Animation Blueprin):

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第7张图片

在弹出的菜单钟选择父类和骨骼,父类为:AnimInstance;骨骼就是当前模型的骨骼

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第8张图片

6,打开动画蓝图的EventGraph面板

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第9张图片

然后再添加一个float属性,名字为Speed,表示角色的即时速度

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第10张图片

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第11张图片

然后再编辑事件:Event Blueprint Update Animation

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第12张图片

7,打开AnimGraph面板

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第13张图片

新建一个State Machine

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第14张图片

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第15张图片

双击State Machine,进入里面编辑。从Entry节点钟拖拽并新建一个State:

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第16张图片

将该State命名为Idel/Run

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第17张图片

然后双击该State,进入里面编辑:其中Speed,就是之前新建float属性

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第18张图片

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第19张图片

最后再返回到最外层的AnimGraph面板,将StateMachine链接到Final Animation Pose上

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第20张图片

8,新建角色蓝图Character Blueprint:

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第21张图片

父类选择工程中的C++ Character class:

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第22张图片

然后打开角色蓝图,选中mesh

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第23张图片

将Anim Class指定为之前创建的动画蓝图:

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第24张图片

将Skeletal Mesh指定为模型的骨骼:

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第25张图片

如果默认的骨骼基准坐标、转向和刚体大小、MovementComponent的默认方向不匹配,则需要编辑下Mesh的Transform

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第26张图片

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第27张图片

9,到此,动画蓝图和角色蓝天编辑完成,可以在C++中使用刚刚新建的角色蓝图。

ATopDownTestGameMode::ATopDownTestGameMode()
{
    // use our custom PlayerController class
    PlayerControllerClass = ATopDownTestPlayerController::StaticClass();

    // set default pawn class to our Blueprinted character
    static ConstructorHelpers::FClassFinder 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名字叫什么

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第28张图片

2,然后在动画蓝图钟的AnimGraph中,拉出一个Slot节点

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第29张图片

然后在从该Slot中连接到Final Animation Pose中:

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第30张图片

如果想修改该Slot节点的Slot名字,可以在属性面变钟修改:

[UE4]动画蓝图的编辑全流程(Animation Blueprint)_第31张图片

如何在C++代码中指定Montage的Slot名字,还没研究过。但是可以通过AnimSequence动态创建一个Montage对象,并指定Slot名字:

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

编辑于 2017-07-29

虚幻 4(游戏引擎)

虚幻引擎

Unreal Engine 4

文章被以下专栏收录

虚幻引擎

 

虚幻引擎

你可能感兴趣的:(UE4)