UE4添加人物动画之状态机
这一节我们创建一个动画蓝图并在C++中把它绑定到角色身上 。
状态机
状态机是可以让动画过渡到另一个动画的工具,它大大简化了动画设计流程。1) 在 UE4 编辑器中,我们以 AnimInstance 为父类创建一个名为 CharacterAnimInstance 的子类。

2) 进入到我们的骨骼网格体文件夹路径,右键选择该资源,创建一个动画蓝图。

3) 双击动画蓝图,点击类设置,然后在右边的细节面板的父类选项中选为我们刚刚创建的 CharacterAnimInstance。



4) 回到 VS 编辑器,在 PlayingCharacter.CPP 文件中添加头文件并把动画的动画蓝图设置成编辑器中创建的动画蓝图。
要添加的头文件:
#include "ConstructorHelpers.h"
#include "CharacterAnimInstance.h"
在构造函数中添加:
注意,由于我们添加的资源是一个类,所以我们要在资源路径的后面加上_C。//指认动画蓝图
static ConstructorHelpers::FClassFinder<UCharacterAnimInstance> AnimInstance( TEXT("AnimBlueprint'/Game/TwinSwordAnimsetBase/UE4_Mannequin/Mesh/UE4_Mannequin_Skeleton_AnimBlueprint.UE4_Mannequin_Skeleton_AnimBlueprint_C'") );
//判断资源是否存在
if (AnimInstance.Succeeded()) {
//赋值
GetMesh()->SetAnimInstanceClass(AnimInstance.Class);
}
5) 打开 CharacterAnimInstance.h 添加两个变量,并把这两个变量公开到蓝图中,让蓝图可以编辑,然后继承 NativeUpdateAnimation 函数,这个函数会每帧更新我们的变量属性。
/**
* //角色动画蓝图
*/
UCLASS()
class GAMEPROJECT_API UCharacterAnimInstance : public UAnimInstance
{
GENERATED_BODY()
protected:
virtual void NativeUpdateAnimation(float DeltaSeconds) override;
//判断人物有没有移动
UPROPERTY(BlueprintReadOnly)
float Iove;
//判断人物有没有跳跃
UPROPERTY(BlueprintReadOnly)
bool IsJump;
};
6) 在CPP文件中添加 PlayingCharacter.h 和 GameFramework/CharacterMovementComponent.h 并实现这些变量。
#include "CharacterAnimInstance.h"
#include "PlayingCharacter.h"
#include "GameFramework/CharacterMovementComponent.h"
void UCharacterAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
Super::NativeUpdateAnimation(DeltaSeconds);
//TryGetPawnOwner() 返回的是一个Pawn类,它通过骨骼模型组件返回指认了它的角色,然后再把返回的Pawn转换成我们想要的角色
APlayingCharacter* Character = Cast<APlayingCharacter>(TryGetPawnOwner());
if (Character)
{
//GetVelocity() 返回的是角色的移动组件的速度,如果这个值大于0说明Character在移动,Size() 是获取向量的模
Iove = Character->GetVelocity().Size();
//IsFalling() 如果角色当前正在下降就返回真
IsJump = Character->GetCharacterMovement()->IsFalling();
}
}
这一节就到这里,下一节我们会在状态机中使用这些变量并设置动画。
- 随机文章
- 马尔代夫提供服务(马尔代夫:享受完美服务的天堂)
- 亚洲强队马尔代夫(马尔代夫成为亚洲足球强队)
- 斐济 马尔代夫 毛里求斯(三大度假胜地横跨印度洋:斐济、马尔代夫、毛里求斯)
- 南京 飞 马尔代夫(南京飞往马尔代夫,迎接热情海岛行摄!)
- 中方马尔代夫债务(方马尔代夫陷债务危机,吁求国际援助)
- 谭龙 马尔代夫(谭龙在马尔代夫执行任务)
- 悉尼大学马尔代夫(悉尼大学与马尔代夫政府达成合作协议)
- 泰姬 马尔代夫(「泰姬岛」 打造充满奢华的马尔代夫旅行新体验)
- 宿务 马尔代夫(宿务至马尔代夫航班即将开通!)
- 马尔代夫对阵中国(中国队迎来马尔代夫的挑战)
- 林志颖去马尔代夫(林志颖马尔代夫度假曝光,晒出美照!)
- 去马尔代夫来姨妈(来马代疗养:姨妈当不了旅行的绊脚石)
- 广东马尔代夫打工(广东青年岛国梦:马尔代夫打工赚钱记)
- 普吉巴厘马尔代夫(三大出境旅游选择:普吉、巴厘、马代)
- 柬埔寨的马尔代夫(后的:柬埔寨:东南亚的新马尔代夫?)
- 沈阳-马尔代夫双人游(沈阳情侣现享甜蜜世界,马尔代夫双人游等你来!)
- 潍坊山东马尔代夫(山东潍坊打造“马尔代夫”,美哭了!)
- 深圳龙岗马尔代夫(深圳龙岗打造马尔代夫式海岛度假胜地)
- 国内马尔代夫山东(山东新冠病毒确诊病例涉留马尔代夫!)
- 英德马尔代夫酒店(重建瑕疵酒店:马尔代夫酒店焕然一新)
- 洲际马尔代夫服务(洲际酒店推出更加优质的马尔代夫服务)
- 李李佳琦马尔代夫(李佳琦闪耀马尔代夫,引领美妆新起点)
- 洛阳表妹马尔代夫(洛阳姑娘在马尔代夫度假,惊艳全场!)
- 柏典马尔代夫饮食(柏典马尔代夫美食:品尝引领心灵独白)
- 春节马尔代夫便宜(马尔代夫旅游在春节期间价格大幅下调)
- 自制马尔代夫矿石(马尔代夫岛上发现珊瑚礁中的未知矿石)
- 重庆包场马尔代夫(重庆公司包场马尔代夫,私享度假世界)
- 郎朗马尔代夫图片(郎朗与妻子在马尔代夫度假的照片曝光)
- 辉县马尔代夫救人(辉县勇士援马尔代夫,成功救援落水者)
- 在马尔代夫坐火车(坐上马尔代夫首列火车,开启岛屿之旅)
