首页 > 其他 > 详细

UE4-动画/蒙太奇/融合(Animation/montage/blend)相关笔记

时间:2019-01-07 17:03:30      阅读:1261      评论:0      收藏:0      [点我收藏+]

自己很少用C++写骨骼动画相关的逻辑,通常BP满足大部分需求,这里留个底备查.

 

1.C++自定义 Animation Blueprint(动画蓝图)

  栗子:

  .h

UCLASS(transient, Blueprintable , hideCategories = AnimInstance, BlueprintType )
class BJ_3DDESIGNAPP_API UCppAnimation_Demonstrate : public UAnimInstance
{
    GENERATED_BODY()
public:
    //初始化虚函数
    virtual void NativeInitializeAnimation() override;
    //tick event 
    virtual void NativeUpdateAnimation(float DeltaTimeX) override;
protected:
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "CppVariant")
        float Speed = 0.0f;
};

 .cppvoid UCppAnimation_Demonstrate::NativeInitializeAnimation()

{
    Super::NativeInitializeAnimation();
}

void UCppAnimation_Demonstrate::NativeUpdateAnimation(float DeltaTimeX)
{
    Super::NativeUpdateAnimation(DeltaTimeX);
  //你的逻辑
}

 

2.C++自定义 Animation Graph Node (动画节点)

  需要C++自定义动画节点的话,需要分别实现UAnimGraphNode_Base,和FAnimNode_Base的子类;

  UAnimGraphNode_Base用于在Editor里的定义一些节点的属性(如颜色/Category 名称/节点名等)

  FAnimNode_Base 里实现我们自己的动画逻辑

 栗子(PS:例子是没有实现任何功能的):

 

AnimNode:

 

.h

 

 

USTRUCT(BlueprintType)
struct BJ_3DDESIGNAPP_API FCppAnimNode_Demonstrate : public FAnimNode_Base
{
    GENERATED_USTRUCT_BODY()

public:
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Links)
        FPoseLink BasePose;
public:
    virtual void Initialize_AnyThread(const FAnimationInitializeContext& Context) override;
    virtual void CacheBones_AnyThread(const FAnimationCacheBonesContext& Context) override;
    virtual void Update_AnyThread(const FAnimationUpdateContext& Context) override;
    virtual void Evaluate_AnyThread(FPoseContext& Output) override;
    virtual void GatherDebugData(FNodeDebugData& DebugData) override;

// Constructor 
public:
    FCppAnimNode_Demonstrate();
};

 

.cpp

FCppAnimNode_Demonstrate::FCppAnimNode_Demonstrate()
{
}

void FCppAnimNode_Demonstrate::Initialize_AnyThread(const FAnimationInitializeContext & Context)
{
    BasePose.Initialize(Context);
}

void FCppAnimNode_Demonstrate::CacheBones_AnyThread(const FAnimationCacheBonesContext & Context)
{
    BasePose.CacheBones(Context);
}

void FCppAnimNode_Demonstrate::Update_AnyThread(const FAnimationUpdateContext & Context)
{
    EvaluateGraphExposedInputs.Execute(Context);
    BasePose.Update(Context);
}

void FCppAnimNode_Demonstrate::Evaluate_AnyThread(FPoseContext & Output)
{
    BasePose.Evaluate(Output);
}

void FCppAnimNode_Demonstrate::GatherDebugData(FNodeDebugData & DebugData)
{
    FString DebugLine = DebugData.GetNodeName(this);

    DebugData.AddDebugItem(DebugLine);

    BasePose.GatherDebugData(DebugData);
}

 

AnimGraphNode:

.h

UCLASS()
class BJ_3DDESIGNAPP_API UCppAnimGraphNode_Demonstrate : public UAnimGraphNode_Base
{
    GENERATED_UCLASS_BODY()

private:
    //注意,自定义的Anim Node类,逻辑都在里面
    UPROPERTY(EditAnywhere, Category = "Settings")
        FCppAnimNode_Demonstrate Node;
public:
    //节点颜色
    virtual FLinearColor GetNodeTitleColor() const override;
    //提示内容
    virtual FText GetTooltipText() const override;
    //节点名称
    virtual FText GetNodeTitle(ENodeTitleType::Type TitleType) const override;
    //Category 分类名称
    virtual FString GetNodeCategory() const override;
};

.cpp

#define LOCTEXT_NAMESPACE "LQ"

UCppAnimGraphNode_Demonstrate::UCppAnimGraphNode_Demonstrate(const FObjectInitializer& ObjectInitializer)
    :Super(ObjectInitializer)
{
}

FLinearColor UCppAnimGraphNode_Demonstrate::GetNodeTitleColor() const
{
    return FLinearColor::Green;
}

FText UCppAnimGraphNode_Demonstrate::GetTooltipText() const
{
    return LOCTEXT("hello_ue4_animation ", "hello_ue4_animation ");
}

FText UCppAnimGraphNode_Demonstrate::GetNodeTitle(ENodeTitleType::Type TitleType) const
{
    return LOCTEXT("HandleCharacterHeight", "HandleCharacterHeight");
}

FString UCppAnimGraphNode_Demonstrate::GetNodeCategory() const
{
    return TEXT("CppCustomNode");
}

#undef LOCTEXT_NAMESPACE

 

 

3.C++ 自定义State machine状态机

  wait

UE4-动画/蒙太奇/融合(Animation/montage/blend)相关笔记

原文:https://www.cnblogs.com/linqing/p/10233861.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!