Unity动画关键帧与曲线操作

在项目开发中,动画的编辑一般由美术完成,他们会输出一个.anim的文件。

其实.anim文件实际上由一系列的关键帧组成,可以对这些关键帧进行操作,达到一定的目的。

本文章介绍实现将曲线变换形状,值偏移,时间偏移,上下、左右翻转。

目录

一、获取一个动画文件上的所有曲线

1.获得动画文件的bind属性

2.通过bind属性获得曲线

3.拿到曲线后获得关键帧

4.操作关键帧后,创建新的曲线

5.通过bind属性,将对应的新曲线应用回去,或者应用到新的动画文件,最后保存刷新资源

二、关键帧KeyFrame的属性和曲线的关系

三、对曲线上的关键帧进行偏移

四、复用曲线而不改变取值范围

1.首先添加编辑好的曲线

2.获取编辑好的曲线

3.根据原曲线上的关键帧进行一定比例的缩放和偏移

五、上下和水平翻转


一、获取一个动画文件上的所有曲线

1.获得动画文件的bind属性

EditorCurveBinding[] editorCurveBindings = AnimationUtility.GetCurveBindings(mClip);

2.通过bind属性获得曲线

AnimationCurve curve = AnimationUtility.GetEditorCurve(mClip, bind);

3.拿到曲线后获得关键帧

Keyframe[] frame = curve.keys;

4.操作关键帧后,创建新的曲线

AnimationCurve ac2 = new AnimationCurve(frame);

5.通过bind属性,将对应的新曲线应用回去,或者应用到新的动画文件,最后保存刷新资源

AnimationUtility.SetEditorCurve(targetClip, bind, curve);

二、关键帧KeyFrame的属性和曲线的关系

通过操作关键帧上的数值,达到形状变换,偏移,翻转的目的。

关于属性的详细介绍和曲线形状插值可以参考Unity动画关键帧插值

inTangent、outTangent代表斜率

inWeight、outWeight代表这个方向上影响的权重

这几个值是影响曲线走向的关键

三、对曲线上的关键帧进行偏移

偏移不影响原本的贝塞尔曲线插值,通过修改KeyFrame.value达到值偏移,修改KeyFrame.time达到时间偏移

四、复用曲线而不改变取值范围

1.首先添加编辑好的曲线

2.获取编辑好的曲线

EditorGUILayout.CurveField(shapeCurve);

3.根据原曲线上的关键帧进行一定比例的缩放和偏移

对值和时间进行偏移后,会改变原本的曲线形状,这里要根据原曲线的插值,对新曲线的关键帧参数进行修改

根据Unity动画关键帧插值提供的公式,计算出未缩放前的坐标,按照缩放比例缩放计算新的P1和P2,然后利用缩放后的P0和P3这两个端点的值,得到ow0,ot0,iw1,it1,设置到关键帧。

五、上下和水平翻转

上下和水平翻转都影响了原本贝塞尔曲线的斜率,tangent值其实是正切值,翻转过后刚好为原本值对应的角α的补角正切,即-tanα

所以上下翻转:

//切值取相反方向的切角补角的值
Keyframe key = new Keyframe(oldKey.time, 2 * first.value - oldKey.value, -oldKey.inTangent, -oldKey.outTangent, oldKey.inWeight, oldKey.outWeight);

左右翻转还需要对权重翻转,in和out对换

//切值取补角,权重调换
Keyframe key = new Keyframe(2 * midTime - oldKey.time, oldKey.value, -oldKey.inTangent, -oldKey.outTangent, oldKey.outWeight, oldKey.inWeight);

以上情况是针对默认曲线的(他们的关键帧inTangetn和outTangent相等),如果曲线是线性的,需要注意inTangent和outTangent不相等的情况

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漫步云巅Kim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值