Unity AnimationCurve动画轨迹详解

一、编辑切线

基本操作:

创建关键点:左键双击

删除关键点:

(1)鼠标移动至关键点上,右键->Delete Key。

(2)左键单击关键点,然后按键盘上的delete

一个键有两个切线 - 左侧一个用于进入坡度,另一个用于出口坡度。切线控制键之间的曲线形状。您可以从许多不同的切线类型中进行选择,以控制曲线离开一个键并到达下一个键的方式。右键单击某个键以选择该键的切线类型

Unity--AnimationCurve动画曲线_lua

要使动画值在传递键时平滑变化,左右切线必须是共线的。以下切线类型可确保平滑度:

  • Clamped Auto:这是默认切线模式。切线自动设置为使曲线顺利通过键。编辑键的位置或时间时,切线会调整以防止曲线“超出”目标值。如果在Clamped Auto模式下手动调整键的切线,则会切换到Free Smooth模式。在下面的示例中,切线自动进入斜率并在移动键时趋于平稳:

Unity--AnimationCurve动画曲线_基本操作_02

  • Auto:这是​ ​传统切线模式​​,仍然是与旧项目向后兼容的选项。除非您有特定原因要使用此模式,否则请使用默认的Clamped Auto。当某个键设置为此模式时,将自动设置切线以使曲线顺利通过该键。但是,与Clamped Auto模式相比有两个不同之处:
     
  1. 当编辑键的位置或时间时,切线不会自动调整; 它们仅在最初将键设置为此模式时进行调整。
  2. 当Unity计算切线时,它不会考虑避免键的目标值“过冲”。

Unity--AnimationCurve动画曲线_AnimationCurve_03

  • Free Smooth:拖动切线控制柄以自由设置切线。它们被锁定为共线以确保平滑。

Unity--AnimationCurve动画曲线_基本操作_04

  • Flat:切线设置为水平(这是自由平滑的特殊情况)。

Unity--AnimationCurve动画曲线_右键_05

有时您可能不希望曲线在通过键时是平滑的。要在曲线中创建急剧变化,请选择 Broken 切线模式。

Unity--AnimationCurve动画曲线_lua_06

使用Broken的切线时,可以单独设置左右切线,也可以一起设置左右切线。左右切线中的每一个都可以设置为以下类型之一:

  • Broken - Free:拖动切线控制柄以自由设置切线。

Unity--AnimationCurve动画曲线_lua_07

  • Broken - Linear:切线指向相邻键。要制作线性曲线段,请将两端的切线都设置为Linear。在下面的示例中,所有三个键都设置为Broken - Linear,以实现从键到键的直线。

Unity--AnimationCurve动画曲线_右键_08

  • Broken - Constant:曲线在两个键之间保持恒定值。左键的值确定曲线段的值。

Unity--AnimationCurve动画曲线_AnimationCurve_09

   Broken - Weighted:根据句柄的长度设置曲线切线。

Unity--AnimationCurve动画曲线_右键_10

当设置曲线后,起点和终点,会出现一个下拉按钮,出现三种方式:

Loop:循环

Ping Pong:曲线和源曲线上下翻转后的曲线循环。

Clamp:一直为端点的值。

当左边选择Loop循环,右边设置Clamp:Unity--AnimationCurve动画曲线_AnimationCurve_11

二、在代码中使用曲线

AnimationCurve包括:(1)键序列 (2)左右循环模式

一:键序列

创建键序列:Keyframe[] ks = new Keyframe[3];

曲线中加入键序列:AnimationCurve curve = new AnimationCurve(ks);

获取曲线中的键序列:Keyframe key = curve[2];或者 Keyframe key = curve.keys[2];

添加单键:curve.Addkey(time,value)

删除单键:curve.RemoveKey(index)

二:左右循环

anim.preWrapMode = WrapMode.Loop;

anim.postWrapMode = WrapMode.Once;

三:键

Keyframe kf = new Keyframe(time,value);

设置入切线:kf.inTangent = 45;

设置出切线:kf.outTangent = 45;

登录后复制

using UnityEngine;public class AnimationCurveTest : MonoBehaviour{    public AnimationCurve curve;    void Start()    {        // 代码控制曲线,也可以在Curve控制器中生成曲线        Keyframe[] ks = new Keyframe[3];        ks[0] = new Keyframe(0, 0);        ks[0].inTangent = 0;        ks[1] = new Keyframe(4, 0);        ks[1].inTangent = 45;        ks[2] = new Keyframe(8, 0);        ks[2].inTangent = 90;        curve = new AnimationCurve(ks);    }    void Update()    {        // 使用曲线,调用curve.Evaluate        transform.position = new Vector3(Time.time, -curve.Evaluate(Time.time) * 0.5f, 0);    }}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空