FVector Speed = Pawn->GetVelocity();//获取方向向量
FVector xyspeed = FVector(Speed.X, Speed.Y,0);//不要z方向
MovementSpeed = xyspeed.Size();//xy取长
//角色是否处于下落状态
IsJumping = Pawn->GetMovementComponent()->IsFalling();//#include "GameFramework/PawnMovementComponent.h"
目录
1创建动画蓝图
2C++
头文件
代码文件
3混合空间1D
动画蓝图理解!
4混合空间2d
5替换掉角色的动画蓝图
创建动画蓝图


添加新状态机

点开状态机

添加状态

点开状态

放置动作

点编译后就能输出姿势了
状态机→状态→输出姿势
C++
选择继承谁


头文件
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Animation/AnimInstance.h"
#include "NewAnimInstance.generated.h"
/**
*
*/
UCLASS()
class TTT_API UNewAnimInstance : public UAnimInstance
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Movement)
float MovementSpeed;//移动速度
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Movement)
bool IsJumping;//跳跃状态
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Movement)
class APawn* Pawn;//为了获取角色信息
//virtual void NativeInitializeAnimation() override;//原生的函数,初始化用
UFUNCTION(BlueprintCallable, Category = AniminationProperty)//动画属性
void UpdateAniminationProperties();
};
代码文件
// Fill out your copyright notice in the Description page of Project Settings.
#include "NewAnimInstance.h"
#include "GameFramework/PawnMovementComponent.h"
void UNewAnimInstance::UpdateAniminationProperties()
{
if (!Pawn)
{
Pawn = TryGetPawnOwner();//获取到角色
}
if (Pawn) {
FVector Speed = Pawn->GetVelocity();//获取方向向量
FVector xyspeed = FVector(Speed.X, Speed.Y,0);//不要z方向
MovementSpeed = xyspeed.Size();//xy取长
//角色是否处于下落状态
IsJumping = Pawn->GetMovementComponent()->IsFalling();//#include "GameFramework/PawnMovementComponent.h"
}
}
生成
去UE4里,
换掉类设置-类选项-父类,
右键拿出updateAniminationproperty,连上(下图)

混合空间1D

选中骨骼后,打开

制作好后
保存
使用1D混合空间

改成这样

点进去,把混合空间拖进来

输入不同速度,编译,会呈现不同的动作,动作取决于你制作的混合空间。
动画蓝图理解!
红色组件是实时更新的,激活c++写的函数,实时返回角色速度和腾空状态。

实时返回横向移动速度(MovementSpeed)和是否下落
void UNewAnimInstance::UpdateAniminationProperties()
{
if (!Pawn)
{
Pawn = TryGetPawnOwner();//获取到角色
}
if (Pawn) {
FVector Speed = Pawn->GetVelocity();
FVector xyspeed = FVector(Speed.X, Speed.Y,0);
MovementSpeed = xyspeed.Size();
IsJumping = Pawn->GetMovementComponent()->IsFalling();//#include "GameFramework/PawnMovementComponent.h"
}
}
移动速度决定输出动画
处理移动速度信息-输出

混合空间2d

状态机
换成2d的混合空间

起跳
1.腾空动作


2.落地动作


3.回到原来的姿势
落地动作播放剩余时间<0.68,即播放了0.32。播放了0.32后,执行下一个动作。

替换掉角色的动画蓝图

系统自带 _C





![[Python从零到壹] 番外篇之可视化利用D3库实现CSDN博客每日统计效果(类似github)](https://img-blog.csdnimg.cn/15efe1ed83884d8c8c542b3feb57b9f4.jpeg#pic_center)













