ue4 中动画控制,利用conduit节点
来源:互联网 发布:矩阵和伴随矩阵的秩 编辑:程序博客网 时间:2024/05/20 19:47
Actor的动画状态可能有几种idle,run,walk,skill,而skill中由又有几种不同的技能动作,要做进步一控制,这里只是提供一种思路,利用动画蓝图里的 conduit 节点,减少大量重复性的 state(比如某一状态到n种技能状态的切换)。
先来看看总体的动画蓝图(Animation Blueprint)
1、先写个继承自 UAnimInstance 的基类 UMyAnimInstance
UMyAnimInstance.h
#include "../CharTypes.h"#include "../Skill/SkillTypes.h"#include "MyAnimInstance.generated.h"class AMyChar;class USkillTemplate;class UMyAnimInstance;DECLARE_DELEGATE_OneParam(FStateNotify, CharState); UCLASS()class UMyAnimInstance : public UAnimInstance{ GENERATED_BODY()public: UMyAnimInstance(); virtual ~UMyAnimInstance(); UFUNCTION(BlueprintCallable, Category = "UMyAnimInstance") AMyChar* GetOwnerChar(); virtual void NativeUpdateAnimation(float DeltaSeconds) override;public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UMyAnimInstance") AMyChar* mOwnerChar; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UMyAnimInstance") float mSpeed; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UMyAnimInstance") CharState mCharState; //控制角色动画的枚举 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UMyAnimInstance") EAnimType mAnimType; //各种技能动画的枚举,在技能状态下细分各种技能 FStateNotify mStateDlg;};
UMyAnimInstance.cpp
UMyAnimInstance::UMyAnimInstance(){ mOwnerChar = nullptr; mSpeed = 0.f; mCharState = CharState::IdleRun; mAnimType = EAnimType::None; mStateDlg.BindLambda([&](CharState _state)->void { mCharState = _state; });}UMyAnimInstance::~UMyAnimInstance(){}AMyChar* UMyAnimInstance::GetOwnerChar(){ if (!mOwnerChar) { APawn* owner = TryGetPawnOwner(); mOwnerChar = owner ? Cast<AMyChar>(owner) : nullptr; } return mOwnerChar;}void UMyAnimInstance::NativeUpdateAnimation(float DeltaSeconds){ Super::NativeUpdateAnimation(DeltaSeconds); if (mOwnerChar == nullptr) { mOwnerChar = GetOwnerChar(); } if (mOwnerChar != nullptr) { //TODO: 待优化,不变时不需要去get mSpeed = mOwnerChar->GetVelocity().Size(); //设置速度 USkillFunction* skillFunc = mOwnerChar->GetUsingSkill(); //正在使用的技能 USkillTemplate* skillTemp = skillFunc != nullptr ? skillFunc->GetSkillTemplate() : nullptr; mAnimType = skillTemp != nullptr ? skillTemp->mAnimType : EAnimType::None; //设置动画类型 }}
2、创建个 蓝图对象 继承自 UMyAnimInstance
选择父类 MyAnimInstance,(u是命名规则被省去了),选择 fbx 动画
3、动画蓝图的各种状态描述,只要是使用conduit这个节点
4、然后就可以通过这两个变量来控制动画
CharState mCharState; EAnimType mAnimType;
具体看上面的代码,在这个函数里
void UMyAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
0 0
- ue4 中动画控制,利用conduit节点
- [UE4]CustomAnimationBlueprintNode 自定义动画蓝图节点
- UE4中动画优化与压缩
- UE4中程序驱动的LookAt动画
- UE4-利用UMG动画制作场景切换Loading进度条
- UE4中常用的几种方法和节点
- UE4材质节点概述
- UE4材质节点
- UE4 扩展节点插件
- ue4材质常用节点
- ue4中动画通知的几种方式
- UE4 骨骼动画 蓝图中调节某一根骨骼
- ue4中动画通知的几种方式
- UE4中制作高大上的相机动画
- UE4 C++控制在UMG控件中播放视频
- UE4 动画系统
- UE4 动画序列
- UE4帧动画Matineed
- HDU 3665 Seaside
- 二叉树中两个节点的最近公共祖先节点
- hdu5793 A Boring Question(推公式or迷之找规律)
- PhpStorm无法使用Terminal解决方法
- Maven那点事儿(Eclipse版)
- ue4 中动画控制,利用conduit节点
- JAVA学习笔记----接口、抽象类、内部类
- 【CDP-云设计模式】第6章,3.直接对象上传模式(Direct Object Upload Pattern)
- 根据前序遍历序列和中序遍历序列构造二叉树算法
- 数据结构实验:连通分量个数
- oracle数据恢复
- C#人民币金额大写
- HDU 2066 一个人的旅行
- SQL 教程简介