- 什么是曲线(Curve)
- 什么是动画曲线(AnimCurve)
- 一个简单的例子
- 添加动画曲线
- 在动画蓝图中应用动画曲线
- 小结
这里的曲线就是我们初中学的函数曲线,给定一个X轴的值,就可以获取唯一的Y轴值,仅此而已。在游戏开发的时候曲线的X轴一般是(但不仅限于)时间,Y轴是什么就多种多样了。
动画曲线是UE4提供的一种机制:
-
我们可以借助的动画编辑器在动画片段的时间轴上编辑这种曲线。它的优点就是直观:动画每一帧(X值)对应的曲线值(Y值)一目了然,而且便于编辑。
-
然后在运行动画的时候获取这个曲线,动画播放到哪一帧,我们也同步地获得了该帧对应的曲线值。
这个例子和官方教程提供的很类似,只不过本文我们使用横板游戏模板再现一下:
添加动画曲线我们在Idle动画上添加一个动画曲线用于控制角色头部的缩放
进入动画编辑器
添加曲线
将曲线命名为“HeadScale”
双击曲线进行编辑,为曲线添加关键帧(Key)
然后可以通过移动关键帧来调整曲线的值
这时如果你尝试播放动画,你会发现它毫无变化,那是必然的,因为动画曲线只不过是借助动画编辑器编辑一下,你不调用它,它就如同不存在一般,接下来我们就介绍如何调用动画曲线。
在动画蓝图中应用动画曲线默认的"Idle/Run(state)"是如下连接的
更改成下面的样子,注意Transform(Modify)Bone
节点需要在它的细节面板上做一些设置
运行一下
我们发现,当角色处于Idle动画的时候,头部会像“呼吸”一样缩放,但是跑动起来头部就消失了。这是因为横板游戏模板中,Idle/Walk/Run三组动画被做成了一个BlendSpace作为Idle/Run状态,而我们仅在Idle动画中添加了名为 “HeadScale”的动画曲线,那么播放其它两个动画时,GetCurveValue
获取不到对应的曲线,就返回了默认值0。
从这里我们也可以看出来动画曲线和动画片段的从属关系
我们可以在 Walk和Run中也加上名为"HeadScale"的曲线,本例中为了区分效果,我把 Walk和Run中的"HeadScale"的曲线值设为常量3 再次运行一下,我们看到,Idle时头部时大时小地呼吸,而跑起来时头部变成了原来的3倍。
曲线的应用场景非常多,除了像本例一样修改角色的形变,通过曲线改变动画混合的Alpha值也是极为常见的用法。