UE4 C++ Character的动画(C++类)
Character类C++的蓝图类
再建一个继承AnimInstance的C++类
继承AnimInstance的C++类的代码:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Animation/AnimInstance.h"
#include "MainPlayerAnimInstance.generated.h"
/**
*
*/
UCLASS()
class GETSTARTED_API UMainPlayerAnimInstance : public UAnimInstance
{
GENERATED_BODY()
public :
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Animation Properties")
float Speed;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Animation Properties")
bool bIsInAir;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Animation Properties")
class AMyinPlayer* PlayerRef;
public:
virtual void NativeInitializeAnimation() override;
UFUNCTION(BlueprintCallable,Category="Animation Properties")
void UpdateAnimationProperties();
};
// Fill out your copyright notice in the Description page of Project Settings.
#include "Characters/Player/MainPlayerAnimInstance.h"
#include "Characters/Player/MyinPlayer.h"
#include "GameFramework/CharacterMovementComponent.h"
void UMainPlayerAnimInstance::NativeInitializeAnimation()//这个就是一开始运行就会调用的
{
//这个是蓝图里面的“尝试获取Pawn拥有者” 因为他不知道PlayerRef是AMainPlayer类,所以要Cast 转换一下
PlayerRef = Cast<AMyinPlayer>(TryGetPawnOwner());
}
void UMainPlayerAnimInstance::UpdateAnimationProperties()
{
if (PlayerRef == nullptr) {
PlayerRef = Cast<AMyinPlayer>(TryGetPawnOwner());
}
if (PlayerRef) {
FVector SpeedFvector = PlayerRef->GetVelocity();//获取一个它的速度
FVector PlanarSpeed = FVector(SpeedFvector.X, SpeedFvector.Y, 0.0f);
Speed = PlanarSpeed.Size();//一个大小,长度 ,就是获取向量的长度
bIsInAir = PlayerRef->GetMovementComponent()->IsFalling();//是否正在坠落
}
}
再建一个继承这个C++的蓝图动画类:
再写状态机