Sceneform 动画

借助 Sceneform,您可以导入包含动画的模型。您可以使用 Sceneform API 播放和控制动画,并将节点附加到模型框架上。

例如,Sceneform 动画示例包含用于构建 Andy Android 模型和棒球帽的文件。Andy 模型包含动画数据,而棒球帽是非动画模型。运行此示例时,Andy 跳舞并挥舞双臂,帽子仍站着,用一个节点固定在头上。

Sceneform 模型动画与 Android 属性动画

区分 Sceneform 中的模型动画与 Android 中的属性动画非常重要。

  • 模型动画由艺术家使用建模和动画软件提前制作。它们包含框架动画数据。这些动画必须导出为 *.fbx 文件,然后导入到 *.sfb 文件中,以便在 Sceneform 中使用。

  • 属性动画是一个基本的 Android 概念,并不局限于 Sceneform。这种动画可以更改具有 getter 和 setter 的 Java 对象中的任何可变值。动画值可以动态设置,但无法打包到 *.sfb 文件中。

    属性动画和模型动画都支持 Android 的 Animator API。它们都支持监听器、播放控件(启动/停止/结束/暂停/取消)、时长和启动延迟。

    模型动画仅提供对 TimeInterpolators 播放的有限支持。模型动画不支持反向播放。

  • 如需了解 Sceneform 动画建模的实际运用,请查看动画示例。

  • 如需了解 Sceneform 的实际属性动画效果,请查看太阳系示例。

模型动画概念

在开始使用动画模型之前,建议您先了解与框架动画相关的具体概念,以及适用于 Sceneform 的相关限制和功能。

  • 骨头。动画模型包含连在一起的骨头,形成层次结构中的父子关系。动画在播放过程中改变了骨架的位置和方向。

    就像在 Sceneform 中移动父 Node 会导致所有子 Node 也移动一样,在 Sceneform 中移动父骨子也会移动子项。骨架可以通过动画移动,也可以通过 SkeletonNode 类作为节点访问。当骨头以 Node 的形式进行访问时,如果正在播放骨头,系统会用动画覆盖每帧的新位置。

  • 骨架框架由所有这些架构组成,形成一个父子关系的层次结构。

    例如,人体模型可能包含“左肩”、“左上臂”、“左肘”和“左前臂”等骨头。从“左肩”作为此层次结构的父级,系统会将“左上臂”分配为子级。“左上臂”的子项可能是“左手肘”和下肢骨头的子项。当肩骨旋转时,上臂、前臂、肘部和下面的任何骨骼都会随之移动。

    Sceneform 没有用于更改框架中框架之间父子关系的 API。必须提前在外部建模和动画软件包中完成此操作。

    即使是描述无机物体的模型也可以利用骨架来描绘现实世界。例如,沙发的模型可以有骨架,也有骨架。

  • 皮肤皮肤是应用于模型的绘制的表面网格的权重。皮肤网格的位置和形状根据附近的骨头计算得出。这种皮肤连接骨架对应着模型变形的情况,从而提供更逼真的移动效果。

    皮肤必须提前使用建模和动画软件包进行准备。Sceneform 可以更改皮肤网格的材料以改变模型的外观。