UE5学习笔记5-对创建好的Charactor添加动画

一、环境说明,UE5.4 + vs2022 + win11

二、目标是让人物模型在运动时可以根据不同的操作播放对应的动画,例如在使人物向前行进中播放走的动画(动画可以在网站中下载例如Mixamo)

        1.创建一个C++类,继承Animinstance类

         xxx.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Animation/AnimInstance.h"
#include "BlasterAnimInstance.generated.h"

/**
 * 
 */
UCLASS()
class BLASTER_API UBlasterAnimInstance : public UAnimInstance
{
	GENERATED_BODY()
public:
	/* 初始化动画 */
	virtual void NativeInitializeAnimation() override;
	/* 更新动画  参数是帧数 */
	virtual void NativeUpdateAnimation(float DeltaTime)override;

private:
	UPROPERTY(BlueprintReadOnly, Category = Character, meta = (AllowPrivateAccess = "true"))/** 蓝图只读 类型是Character 允许私有访问 */
	class ABlasterCharacter* BlasterCharacter;

	UPROPERTY(BlueprintReadOnly, Category = Character, meta = (AllowPrivateAccess = "true"))/** 蓝图只读 类型是Character 允许私有访问 */
	float Speed;

	UPROPERTY(BlueprintReadOnly, Category = Character, meta = (AllowPrivateAccess = "true"))/** 蓝图只读 类型是Character 允许私有访问 */
	bool bIsInAir;

	UPROPERTY(BlueprintReadOnly, Category = Character, meta = (AllowPrivateAccess = "true"))/** 蓝图只读 类型是Character 允许私有访问 */
	bool bIsAccelerating; /** 获得角色加速度 */
};

        xxx.cpp

// Fill out your copyright notice in the Description page of Project Settings.


#include "BlasterAnimInstance.h"
#include "BlasterCharacter.h"
#include "GameFramework/CharacterMovementComponent.h"

void UBlasterAnimInstance::NativeInitializeAnimation()
{
	Super::NativeInitializeAnimation();

	BlasterCharacter = Cast<ABlasterCharacter>(TryGetPawnOwner());/** TryGetPawnOwner()获取有关角色(Pawn)的上下文信息 */
}

void UBlasterAnimInstance::NativeUpdateAnimation(float DeltaTime)
{
	Super::NativeUpdateAnimation(DeltaTime);

	/* 判断当前角色是否为空 为空获得当前角色当作第一帧 */
	if (BlasterCharacter == nullptr)
	{
		BlasterCharacter = Cast<ABlasterCharacter>(TryGetPawnOwner());
	}

	if (BlasterCharacter == nullptr)return;

	/* 只想获得平面上xy的速度的向量,将z方向的速度置为0 */
	FVector Velocity = BlasterCharacter->GetVelocity();
	Velocity.Z = 0.f;
	/* 获得速度的向量 */
	Speed = Velocity.Size();

	bIsInAir = BlasterCharacter->GetCharacterMovement()->IsFalling(); /** IsFalling()判断是否在空中 GetCharacterMovement()获得人物移动 */
	bIsAccelerating = BlasterCharacter->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0.f ? true : false;
}

        2.创建一个动画蓝图,在某个文件下单机右键选择动画->选择动画蓝图

         3.选择特定骨架选择你想要添加的骨架,父类选择AnimInstance

 

        4.双机打开动画蓝图,在上方选择类设置,在右侧栏的细节一栏中将父类选择成之前创建的AnimInstance基类的名字(UE的其他版本的类设置在不同的地方,可以上网查一下,中间的两个长方体敢打开时没有不用在意)

         5.中间区域标签页不小心关闭后可以在窗口->我的蓝图->图标->单机右键选择打开图标即可

         6.在AnimGraph的标签页中单机右键选择状态机中的state machine

 

        7.双击进入 在entry节点点击后拖拽松开鼠标选择添加状态

        8.添加结果如图 双击可以重新命名

        9.节点run到start 双击箭头上的圆圈后进入界面tian

 

        节点start到falling,在细节界面勾选基于状态中序列播放器的自动规则

 

 

        节点falling到stop 

        节点stop到run

        start节点双击选择对应的动画的start 其余节点相同

falling节点 

 stop节点

 run节点

         在和你动画蓝图所在文件夹中添加一个混合空间,选择对应的骨骼

 

        10.打开混合空间蓝图在下方进度条上分别选择idel,walk,run的动画。拖拽到进度条上,并在资产详情界面中的Axis Settings中的水平坐标的名称和最大轴距设置成speed和350

        11.在动画蓝图中的run节点中设置如图所示

 

        12.编译保存 

        13.双击打开人物蓝图,在网格体中将动画的类设置成刚才创建的动画类

  • 29
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值