android 曲线动效 曲线动画_关键帧


文章目录

  • 什么是曲线(Curve)
  • 什么是动画曲线(AnimCurve)
  • 一个简单的例子
  • 添加动画曲线
  • 在动画蓝图中应用动画曲线
  • 小结


什么是曲线(Curve)

这里的曲线就是我们初中学的函数曲线,给定一个X轴的值,就可以获取唯一的Y轴值,仅此而已。在游戏开发的时候曲线的X轴一般是(但不仅限于)时间,Y轴是什么就多种多样了。

android 曲线动效 曲线动画_android 曲线动效_02

什么是动画曲线(AnimCurve)

动画曲线是UE4提供的一种机制:

  • 我们可以借助的动画编辑器在动画片段的时间轴上编辑这种曲线。它的优点就是直观:动画每一帧(X值)对应的曲线值(Y值)一目了然,而且便于编辑。
  • 然后在运行动画的时候获取这个曲线,动画播放到哪一帧,我们也同步地获得了该帧对应的曲线值。

一个简单的例子

这个例子和官方教程提供的很类似,只不过本文我们使用横板游戏模板再现一下:

添加动画曲线

我们在Idle动画上添加一个动画曲线用于控制角色头部的缩放

android 曲线动效 曲线动画_Unreal_03

进入动画编辑器

android 曲线动效 曲线动画_UE4_04

添加曲线

android 曲线动效 曲线动画_关键帧_05


将曲线命名为“HeadScale”

android 曲线动效 曲线动画_关键帧_06

双击曲线进行编辑,为曲线添加关键帧(Key)

android 曲线动效 曲线动画_虚幻引擎_07

然后可以通过移动关键帧来调整曲线的值

android 曲线动效 曲线动画_虚幻引擎_08

这时如果你尝试播放动画,你会发现它毫无变化,那是必然的,因为动画曲线只不过是借助动画编辑器编辑一下,你不调用它,它就如同不存在一般,接下来我们就介绍如何调用动画曲线。

在动画蓝图中应用动画曲线

默认的"Idle/Run(state)"是如下连接的

android 曲线动效 曲线动画_Unreal_09

更改成下面的样子,注意Transform(Modify)Bone节点需要在它的细节面板上做一些设置

android 曲线动效 曲线动画_android 曲线动效_10


运行一下

android 曲线动效 曲线动画_Unreal_11

我们发现,当角色处于Idle动画的时候,头部会像“呼吸”一样缩放,但是跑动起来头部就消失了。这是因为横板游戏模板中,Idle/Walk/Run三组动画被做成了一个BlendSpace作为Idle/Run状态,而我们仅在Idle动画中添加了名为 “HeadScale”的动画曲线,那么播放其它两个动画时,GetCurveValue获取不到对应的曲线,就返回了默认值0。

从这里我们也可以看出来动画曲线和动画片段的从属关系

我们可以在 Walk和Run中也加上名为"HeadScale"的曲线,本例中为了区分效果,我把 Walk和Run中的"HeadScale"的曲线值设为常量3

android 曲线动效 曲线动画_关键帧_12


再次运行一下,我们看到,Idle时头部时大时小地呼吸,而跑起来时头部变成了原来的3倍。

android 曲线动效 曲线动画_关键帧

小结

曲线的应用场景非常多,除了像本例一样修改角色的形变,通过曲线改变动画混合的Alpha值也是极为常见的用法。