程序化编辑动画剪辑

    Creator 除了支持在 动画编辑器创建动画剪辑,还可以通过脚本模块程序化地创建动画剪辑,例如:

    具体的说明请查看下文介绍。

    动画剪辑中的任一节点支持添加多条 动画属性轨道,动画属性轨道由类 表示,描述了某一对象上的某一动画属性随着时间推移而发生的变化,并规定了如何将其应用到目标对象上。

    动画属性轨道根据下文中介绍的 的不同可包含一至多条通道,一般情况下一条动画属性轨道对应一条通道,除了复合轨道,例如 position,有 XYZ 三条通道。每条通道都含有一条曲线,曲线是 可编辑的最小单元,若动画属性轨道上未添加关键帧,则曲线为空曲线。

    根据曲线类型的不同,通道包括以下几种:

    • 实数通道,含有一条实数曲线 RealCurve

    • 对象通道,含有一条动画曲线 ObjectCurve

    动画属性轨道的类型决定了轨道包含多少条通道(曲线),以及每条通道(曲线)的类型和含义,Creator 提供了以下类型的轨道:

    每个动画属性轨道都记录了一个路径,称为 轨道路径,由类 animation.TrackPath 表示。轨道路径指定了在 运行时 如何从当前节点对象寻址到目标对象,因为寻址是在运行时完成的,这种特性使得动画剪辑可以复用到多个对象上。

    轨道路径由多个子路径组成,每个子路径都指定了如何从上一级路径的寻址结果寻址到另一个对象,最后一个子路径寻址到的结果就是目标对象。类似文件路径用于定位文件夹或文件,而轨道路径用于定位目标对象。

    通过下表中 animation.TrackPath 的方法可根据目标对象类型添加子路径,以及获取、判断子路径的类型:

    以下代码片段演示了如何指定轨道路径:

    轨道路径中的子路径可以任意组合,只要它们具有正确的含义,但以下几种情况的轨道路径是无效的:

    1. 空路径
    2. 路径的末尾不是属性或数组元素,且未设置 值代理(参考下文介绍)

    对于无效的路径,运行时,此条轨道会被忽略并给出警告。

    在轨道路径定位到目标对象后,若最后定位到的是一个 属性,默认情况下 Creator 将通过对该属性赋值以完成动画。

    要创建值代理,需要实现 animation.ValueProxyFactory 接口,代码示例如下:

    然后我们便可以设置一个能修改材质属性的动画属性轨道,代码示例如下:

    因为动画是可重用的,它可以绑定到多个对象上,Creator 支持 不同对象应由不同的值代理,所以 animation.TrackvalueProxy 字段是 animation.ValueProxyFactory 而不是 animation.ValueProxy。另一方面,实现可以在 forTarget 这一层面做些优化。

    注意:此例仅为阐述值代理的创建和使用,Creator 本身提供了用于设置材质属性(Uniform)的值代理工厂:animation.UniformProxyFactory

    动画剪辑通过 AnimationClip.wrapMode 可以设置不同的循环模式。以下列出了几种常用的循环模式:

    更多循环模式,详情请参考 API WrapMode 以及文档 。

    有些动画数据并不由轨道表示,但它以另一种形式存在于动画剪辑中,并在运行时产生动画效果。这部分动画数据称为外来动画(Exotic Animation)。外来动画旨在于让 Creator 更高效地存储和计算一些复杂的动画。

    用户无法访问和编辑外来动画。由编辑器从模型中导入的骨骼动画就存储在外来动画中。