ue4c++日记7(动画蓝图)

		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 

猜你喜欢

转载自blog.csdn.net/weixin_56537692/article/details/128764331