unreal4 动画状态机_unreal4 路径动画 - CSDN
  • 实在惭愧,和朋友一起做UE4从10月份就说好了,结果依旧拖到了寒假,然而毕设又来了。 第一关的锅我背了三个月还没做完,直到疫情被困在家必须好好干一把了(加油) 以下是在最近做一个简单的道具拾取控制学习过程和...

    惯例先说两句

    实在惭愧,和朋友一起做UE4从10月份就说好了,结果依旧拖到了寒假,然而毕设又来了。
    第一关的锅我背了三个月还没做完,直到疫情被困在家必须好好干一把了(加油)

    以下是在最近做一个简单的道具拾取控制学习过程和踩过的坑,先来感谢一下非常非常有用的教程:

    https://v.youku.com/v_show/id_XMTMzMDYyMzQxNg==.html 国外视频教程,易懂,就是不太清晰
    https://blog.csdn.net/u012801153/article/details/78477425 这是整个蒙太奇使用很详细的教程,看懂基本够用
    https://docs.unrealengine.com/zh-CN/Engine/Animation/AnimHowTo/AdditiveAnimations/index.html 官方分层动画教程
    https://blog.csdn.net/u012999985/article/details/51050848 也比较有诚意,就是字体颜色不太友好
    https://www.iteye.com/blog/aigo-2277545 卡了很久很久的蒙太奇插槽设置必看!

    动画蒙太奇Montage

    什么是蒙太奇?

    就理解为片段剪辑组合就成,UE4里面就是把不同的小片段(动作动画或者蒙太奇)组合成起来用,比如上述引用例子中常见的:攻击过程PunchProcess = 攻击准备PunchBegin + 左拳PunchLeft * n + 右拳PunchRight * n + PunchEnd攻击结束,这些动作的组合都可以用一个蒙太奇片段组合实现。
    具体如何组合蒙太奇制作教程说得非常详细,不必再复述。

    为什么要用?

    人物所有动作不可能都在状态机中开状态,比如实现一个攻击,这在状态机中不好定义(左拳->右拳->循环??显然UE4不是这个意思)。我这次需要实现的是弯腰拾取,然后从双手下垂的run_walk转换成hold_run_walk状态,其中拾取pick这个过程就没有必要做状态了,使用蒙太奇非常合适,并且还有骨骼混合的功能。
    总结下,蒙太奇有以下功能(目前使用):

    • 不需要使用状态机来定义的短暂动作行为:比如,弯腰伸手拾取
    • 复杂的动作组合:比如,组合动作攻击
    • 只需要骨骼部分呈现的动作:比如,有一个伸手拾取的动画和walk_run状态,使用蒙太奇的分层骨骼混合可以实现边走路/跑步,边伸手拾取的动作

    其他后面想到再补充

    相关函数

    • Play Montage:播放蒙太奇,目标是Character,人物蓝图和动画蓝图均可调用,开始时间可以设置。目标是Character
    • is Montage Playing:避免重复播放,或者冲突。防止冲突和重复播放
    • Layered Bone Blend:混合骨骼,实现动作和当前状态的融合,十分强大!视频讲得很透彻,实现逻辑大概是:在原来简单状态机输出动作的基础上,先把每次(暂且理解为每帧)动作暂存在一个cache,然后用这个cache和需要混合骨骼的蒙太奇混合,最终生成输出的动作。具体比如:目前是walk状态,那么cache存某帧的walk,然后把这个walk作为分层混合的Base Pose,;再把该walk输入经过slot,得到pick的某帧状态作为Base Pose0,两者混合输出最终的姿势。下面上图,都是根据视频蒙太奇制作教程做的。最终的AnimGraph

    踩过的坑

    为什么我放插槽的时候只能选择DefaultGroup.DefaultSlot?

    哦亲爱的当然不是你的错,把DefaultGroup.DefaultSlot插槽节点放进来之后,再在详情里面更改,直接是找不到的,谢谢这篇.Slot节点细节设置

    蒙太奇里面如何添加新的Slot?

    中下方的部分只能预览,右下的动画插槽管理才是添加新的插槽和组的地方,第一次不建议使用DefaultSlot,更明白一点。具体插槽的编辑,片段的概念,这个这个介绍和演示得很好。
    在这里插入图片描述

    使用分层混合,为什么播放了蒙太奇之后,原有状态不见了,或者动画直接僵住?

    建议进行以下分析:

    • 是分层混合没有设置好,具体上半身/下半身,或者哪个骨骼进行混合,多大比例的混合?请移步官方教程分层混合设置
    • 播放的蒙太奇是否包含混合的插槽?
    • 强烈建议分步完成调试!

    待续…

    展开全文
  • [UE4]状态机,实现动画播放

    千次阅读 2018-02-24 17:58:46
    博客分类: UnrealEngineUE4 不好意思,我稍稍标题党了,目前还不清楚如何用C++代码来实现BlendSpace和Montage的逻辑,如果这两个文件也不我们创建了,那么以下内容就是真正意义上的纯C++实现角色蓝图和动画蓝图。...


    博客分类: UnrealEngine


     

    不好意思,我稍稍标题党了,目前还不清楚如何用C++代码来实现BlendSpace和Montage的逻辑,如果这两个文件也不我们创建了,那么以下内容就是真正意义上的纯C++实现角色蓝图和动画蓝图。

     

    逻辑用C++,动画处理用蓝图,对于有一定复杂度的项目来说这种做法很不方便,最方便的方式就是所有跟蓝图相关的操作能够让C++编码实现。即使是简单项目,但是如果模型数量有几十个,每个模型的动画切换逻辑是一样的,让你给每一个模型编辑动画状态机也是个体力活,所以如果这些可以用C++代码实现的话,只写一遍动画操作的逻辑,就可以一劳永逸。

     

    用C++代码指定Actor的SkeletalMesh

    用过蓝图的都知道,一般指定SkeletalMesh是在角色蓝图中指定的:

     

    现在没有角色蓝图了,设置SkeletalMesh的C++代码如下:

    Cpp代码  收藏代码
    1. USkeletalMesh* MyMesh = LoadObject<USkeletalMesh>(NULL, TEXT("SkeletalMesh'/Game/MyMesh.MyMesh'"));  
    2. MyActor* Actor = World->SpawnActor<MyActor>(FVector(1000, 1000, 0), FRotator(0, 0, 0));  
    3. Actor->GetMesh()->SetSkeletalMesh(MyMesh);  

     
      

    用C++代码播放BlendSpace (1D、2D均可)

    因为动画蓝图也没有了,所以播放BlendSpace和AnimationSequence也通过C++代码实现:
    两种材质的类型在C++中分别对应UBlendSpaceUAnimSequence

     1,先定义一个UPROPERTY变量,并在编辑器中设置该BlendSpace

    Cpp代码  收藏代码
    1. UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Anims")  
    2. UBlendSpace1D *BlendSpace;  
     

     

    2,设置BlendSpace参数并播放动画,这里BlendSpace假设以X轴为方向

     需要包含头文件:#include "Runtime/Engine/Classes/Animation/SkeletalMeshActor.h"

    Cpp代码  收藏代码
    1. ASkeletalMeshActor *Skel = Cast<ASkeletalMeshActor>(MyActor);  
    2. if (Skel)  
    3. {  
    4.     USkeletalMeshComponent *Mesh = Skel->GetSkeletalMeshComponent();  
    5.     if (Mesh)  
    6.     {  
    7.         Mesh->PlayAnimation(BlendSpace, true);  
    8.         FVector BlendParams(50.0f, 0.0f, 0.0f);  
    9.         Mesh->GetSingleNodeInstance()->SetBlendSpaceInput(BlendParams);  
    10.     }  
    11. }  
     

      

    用C++代码在指定Slot位置播放AnimationSequence

    1,先定义一个UPROPERTY变量,并在编辑器中设置该UAnimSequence

     

    Cpp代码  收藏代码
    1. UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Anims");  
    2. UAnimSequence *MyAnimSequence;  
     
    2,在指定插槽Slot上播放:
    Cpp代码  收藏代码
    1. USkeletalMeshComponent *Mesh = MyActor->FindComponentByClass<USkeletalMeshComponent>();  
    2. if (Mesh)  
    3. {  
    4.     UAnimInstance *AnimInst = Mesh->GetAnimInstance();  
    5.     if (AnimInst)  
    6.     {  
    7.         AnimInst->PlaySlotAnimationAsDynamicMontage(MyAnimSequence, TEXT("UpperBody"), 0.1f, 0.1f, 1.0f, 30.0f);  
    8.     }  
    9. }  
    10.    
    注:GetAnimInstance之前需要SetAnimInstanceClass,如何设置,参见:
    http://aigo.iteye.com/blog/2285001

    3,播放AnimMontage:
    Cpp代码  收藏代码
    1. MyAnimTimer = AnimInstance->Montage_Play(MyMontage);  
    2. GetWorldTimerManager().SetTimer(PauseMontageTimerHandle, this, &MyActor::PauseMontageFunc, MyAnimTimer, false);  
    上面例子中UBlendSpace1D和UAnimSequence变量可以在编辑器中设置以外,也可以通过C++代码加载设置,具体方法:

    C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>()

    http://aigo.iteye.com/blog/2281558

     

    文章参考自:

    How can I play animations strictly from C++? 这个帖子讲了如何不使用动画蓝图,不使用动画状态机,纯C++编码方式实现动画播放。

    https://answers.unrealengine.com/questions/292345/how-can-i-play-animations-strictly-from-c.html


    Animation Blueprint, Implement Custom C++ Logic Via Tick Updates

    https://wiki.unrealengine.com/Animation_Blueprint,_Implement_Custom_C%2B%2B_Logic_Via_Tick_Updates

    Using Additive Animations

    https://docs.unrealengine.com/latest/INT/Engine/Animation/AnimHowTo/AdditiveAnimations/index.html

    展开全文
  • 虚幻4 2d状态机动画基础

    千次阅读 2015-07-07 21:26:14
    这之前一直保存在qq和百度云里的...首先添加判断是否处于跳跃状态,然后判断是否属于移动状态,分别进行赋值,然后调用分支节点,如果正确则进入枚举类型的jump动画,如果否则再次进行判断,分别调用idel和run动画。 枚

    这之前一直保存在qq和百度云里的,现在贴出。

    首先需要为精灵进行锁定y轴,4.8以后直接选择模式即可

     

     

    自定义方法:可以通过添加函数添加,并进行输入输出设置:

     

     

    逻辑如下:

     

    首先添加判断是否处于跳跃状态,然后判断是否属于移动状态,分别进行赋值,然后调用分支节点,如果正确则进入枚举类型的jump动画,如果否则再次进行判断,分别调用idelrun动画。

    枚举类型节点设置如下:

     

    然后将枚举变量中的各个变量进行赋值:

     

    最后调用枚举类型AnimateState对选择进行赋值,使其变量内容对应枚举内容,然后分将Flipbook对枚举内容进行赋值。将返回值返回到ReturnNode上。

    以上为自定义方法,然后再在蓝图中调用此方法,如下所示:

     

    首先自定义事件开始,判断当前是否正在移动,并未IsMoving进行赋值,然后判断是否处于凌空状态,对IsFalling变量进行赋值。

    将两个变量的值传入自定义方法中:

     

    该方法返回FlipBook,调用SetFlipbook方法更改当前角色的动画:


    展开全文
  • ue4-混合动画及动画状态机

    万次阅读 2017-01-20 14:11:51
    动画状态机及动画切换 1. 一维混合 创建一个一维过渡的混合动画 Blend Space 1D 选择对应的骨骼 编辑 Blend Space 1D,定义变量名为 Speed, 值范围是 0~374 拖入需要混合的动画,Idle、Walk、Run 蓝图动画...

    混合几种动画,通过参数过渡,如 Idle -> Walk -> Run
    动画状态机及动画切换


    1. 一维混合

    这里写图片描述

    1. 创建一个一维过渡的混合动画 Blend Space 1D
      这里写图片描述

    2. 选择对应的骨骼
      这里写图片描述

    3. 编辑 Blend Space 1D,定义变量名为 Speed, 值范围是 0~374
      这里写图片描述

    4. 拖入需要混合的动画,Idle、Walk、Run
      这里写图片描述

    5. 蓝图动画(AnimInstance)中使用这个混合动画

      1. 创建动画状态机
        这里写图片描述

      2. 拖入刚创建的混合动画及其他动画
        这里写图片描述

      3. 使用一个变量 Speed 去控制混合动画中的变量 Speed
        这里写图片描述

      4. 动画建切换的条件判断
        这里写图片描述

        这里写图片描述

        • 如果播动画期间就直接切换状态,可以截取原状态剩余多少时间是,直接切过去,比如 JumpStart-> JumpLoop
          这里写图片描述

    2. 二维混合

    • todo: 待续
    • 可以参考官方示例 StrategyGame 工程中 Dwarf 的2D混合。
    展开全文
  • Unreal Engine 4 动画系统介绍

    千次阅读 2018-05-10 10:39:45
    Unreal Open Day 2017 活动上 ,Epic Games 资深开发者支持工程师王祢先生为到场的开发者介绍了在 Unreal Engine 4动画系统,以下是演讲实录。 大家好!鉴于引擎移动端功能以及 UI 优化都有同事做了介绍,今天我...
  • 1.动画蓝图 包含 状态机 包含 混合空间BlendSpace,即状态机包含在动画蓝图的"动画图表中",而混合空间可用于在状态机中向某(没)一个状态输出最终POSE: 动画蓝图一共包含两个东西,除了上面提到的动画图表,还...
  • Unreal Engine 4 初学者教程:开始

    万次阅读 多人点赞 2018-06-14 16:11:14
    Unreal Engine 4 初学者教程:开始 原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:kmyhy Unreal Engine 4 是一个游戏开发工具集,能够开发从 2D 手机游戏到 3A ...
  • Unreal里的动画

    千次阅读 2014-07-25 17:57:51
    跟着Unreal的视频教程从零做了一个ThirdPersonGame,
  • 获取动画状态机中动画片段的长度,非常简单的代码 public float GetClipLength(Animator animator, string clipName) { if (null == animator || string.IsNullOrEmpty(clipName) || null == animator....
  • 状态机参考学习链接:https://blog.csdn.net/cc13813194235/article/details/79972955 接上篇:https://blog.csdn.net/yf160702/article/details/85088087   接上篇,以上操作是双击7号(ThirdPersonWalk到...
  • unreal4特性介绍

    2019-01-24 11:11:55
    unreal4特性介绍 原文地址: https://www.unrealengine.com/products/unreal-engine-4 unreal enginer介绍 我的UE4学习(一) 你曾想过用连线的形式来编写程序么; 你曾想过通过编辑工具就...
  • Unreal Engine 3到Unreal Engine 4

    千次阅读 2015-07-02 19:38:32
    介绍Unreal Engine 4Unreal Engine 3的一些不同点。
  • 状态机参考学习链接:https://blog.csdn.net/cc13813194235/article/details/79972955 学习之后,把自己所学记录一下,初学者可以参考...下面是直接播放动画,不使用动作蓝图(状态机)。 这种方法是在关卡蓝图...
  • Unreal4 入门(关卡动态加载)

    千次阅读 2016-10-19 11:50:49
    对于大型游戏MMORPG游戏或是3D街景(虚拟现实)还有大型无缝地图都需要地图啊,关卡动态加载的机制来达到让用户感觉自己一直是在漫游,而不会出现Loading(读条),卡界面等情况。...UnrealEngine4
  • 状态机参考学习链接:https://blog.csdn.net/cc13813194235/article/details/79972955 ... (接上篇)空白处点击右键,搜索1,选择2,创建3号状态机,并进行...双击3号,出现5号画面(状态机画面),完整画面在下图 ...
  • Unreal3动画系统概述

    千次阅读 2012-09-19 21:40:29
    动画的网格物体 动 画混合 混 合树概述 构 建混合树 AnimTree(动画树)节点 混 合节点 动 画播放 AnimSequence(动画序列) AnimSet(动画集) 骨 骼到轨迹的映射 AdditiveAnimation(叠加型...
  • 方向控制和人物旋转不匹配。 状态中状态转移中的动画结束时间...并且人物动画状态变换不协调。 一定要在Spring Arm中的Camera Settings中勾选Use Pawn Control Rotation和BP中的Details下的Character
  • 动画蒙太奇出现的位置是在动画蓝图的...2.动画图表,这里已经不再直接又状态机直接输出POSE,而是现将POSE存到缓存,然后再混合起来。注意在混合的时候,可以在红圈处选择骨骼,至于混合的具体规则我不是很清楚,但...
1 2 3 4 5 ... 20
收藏数 1,245
精华内容 498
关键字:

unreal4 动画状态机