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