编辑动画
本章节介绍如何在 Zephyr3D 编辑器中为节点创建、管理和编辑动画。 在开始具体步骤之前,先了解 Zephyr3D 中动画相关的几个核心对象。
1. 动画数据结构概述
在 Zephyr3D 中,每个节点都拥有一个动画集容器对象 AnimationSet,用于管理与该节点相关的所有动画资源。
AnimationSet- 挂载在单个节点上;
- 作为该节点所有动画的集合容器。
AnimationClip- 表示一段完整的动画片段,例如:Door_Open、Camera_Move_01;
- 每个
AnimationClip中可以包含多个轨道。
AnimationTrack表示对某个属性的动画轨道,例如:
- 位置轨道
- 旋转轨道
- 缩放轨道
- 自定义数值/颜色属性轨道等
每条轨道由多个关键帧组成,用于描述该属性随时间的变化。
关系可以概括为:
- 每个节点 → 拥有一个 AnimationSet
- AnimationSet → 包含多个 AnimationClip
- 每个 AnimationClip → 包含一条或多条 AnimationTrack
- 每条 AnimationTrack → 绑定到该节点上的某个可动画属性
2. 创建动画轨道的基本流程
在编辑器中,动画是从“属性”出发创建的: 你先选择节点,再在属性面板中对某个支持动画的字段创建对应的 AnimationTrack。
下面是完整的操作步骤。
步骤 1:选中要绑定动画的节点
- 在场景层级/视图中,选中需要添加动画的节点。
- 属性面板会显示该节点的所有可编辑属性(如位置、旋转、缩放、灯光参数等)。
注意:动画是绑定在该节点的 AnimationSet 上,所以请确认你选中的是目标节点本身
步骤 2:在属性面板中找到可动画属性
在属性面板中,所有支持生成动画轨道的属性字段左侧,会有一个标题为A的按钮:
- 该按钮表示:
“此属性可以创建动画轨道(
AnimationTrack)” - 没有
A按钮的属性,当前版本不支持直接为其创建动画轨道。
操作方式:
- 在属性面板中,定位到你想要添加动画的属性。
- 确认该属性左侧存在 A 按钮。
步骤 3:点击 A 按钮,创建轨道
- 点击该属性左侧的 A 按钮。
- 编辑器会弹出 创建轨道对话框,用于配置该属性对应的动画轨道。
在创建轨道对话框中,你可以:
- 选择绑定于该节点的现有动画(
AnimationClip)- 从下拉列表中选择该节点 AnimationSet 中已经存在的某个 Clip;
- 此时新轨道会被添加到该已有 Clip 中。
- 或新建一个动画(
AnimationClip)- 输入新动画剪辑的名称(如 Door_Open, Light_Flicker 等);
- 编辑器会在该节点的 AnimationSet 中创建一个新的 AnimationClip。
同时需要:
- 输入该轨道的名称
- 用于在动画/属性面板中标识该轨道;
- 建议采用能体现用途的命名,如:
- PosY_MoveUp
- Intensity_Pulse
- Door_RotateY 等。
确认无误后,点击 【确认】 按钮:
- 会在所选 AnimationClip 中创建一条新的 AnimationTrack;
- 该轨道会绑定到当前属性上。
步骤 4:在属性面板中选择轨道并打开编辑器
轨道创建成功后:
- 在属性面板的动画属性部分,可以看到该属性下关联的一个或多个动画轨道。
- 在此处选择刚刚创建的那条轨道。
- 点击 【编辑】 按钮(是一个编辑图标)。
执行上述操作后,会弹出 轨道编辑器(Track Editor) 窗口。
轨道编辑器是专门用于编辑该 AnimationTrack 的时间轴和关键帧的工具界面。
步骤 5:在轨道编辑器中创建 / 编辑 / 删除关键帧
在轨道编辑器中,你可以对这条AnimationTrack进行完整的关键帧编辑操作,包括:
调整曲线属性(对于非颜色类轨道)
- 展开
Curve Settings面板 - 调整属性值的范围(最小值,最大值),该属性影响曲线的展示
- 调整曲线插值类型(
Linear,Step,CubicSpline),该属性影响曲线的插值计算
- 展开
创建关键帧
- 点击时间轴窗口,在该时刻创建一个关键帧
- 当前时间点的属性值会被记录到 AnimationTrack 中,形成一个新的关键帧。
编辑关键帧
- 在轨道时间轴上选中某个关键帧:
- 直接拖动关键帧左右移动以调整其时间;
- 在主编辑界面中调整该属性的当前值(例如移动节点)或在属性/数值面板中修改该关键帧的具体值;
删除关键帧
- 右键单击关键帧可删除此关键帧
动画效果预览
- 在轨道编辑器中拖动红色竖线可预览动画效果
步骤 6:播放已创建的动画
可以通过以下两种方式播放动画:
- 在属性编辑器面板中设置为动画选中自动播放,这样当该节点加载完毕后会自动循环播放指定的动画。
- 在代码中手动播放:
ts
node.animationSet.playAnimation('Transform');