<div style="padding:15px 15px 2px 20px; border-radius:2px; margin-bottom:20px; border:1px solid #ddd">

<callout>
<p style="margin-bottom:0.75em"><b>Licensing</b></p>!!
将 Spine 官方运行时整合到自建应用程序中[需要持有 Spine 许可证](/git/spine-runtimes/spine-unity#licensing).
</callout>

<div style="font-size: 1.6em; margin: 0 0 .5em;">spine-unity 运行时文档</div>!!
* [安装运行时](/spine-unity-installation)
* [示例](/spine-unity-examples)
* [资产](/spine-unity-assets)
* [主要组件](/spine-unity-main-components)
* [工具组件](/spine-unity-utility-components)
* [渲染](/spine-unity-rendering)
* [时间轴扩展 UPM 软件包](/spine-unity-timeline)
* [懒加载扩展 UPM 软件包](/spine-unity-on-demand-loading)
* [常见问题(FAQ)](/spine-unity-faq)
</div>!!

# 时间轴扩展UPM包

![](/img/spine-runtimes-guide/spine-unity/timeline/timeline.png)

时间轴(Timeline)扩展功能是一个独立的UPM(Unity Package Manager)包. 关于如何下载和安装该包, 请参见[可选UPM插件包](/spine-unity-installation#可选的UPM扩展包)一节; 关于如何更新UPM扩展包, 请查阅[更新UPM扩展包](/spine-unity-installation#更新UPM扩展包). 以下视频将演示安装和使用时间轴扩展包的详细步骤.

<iframe width="560" height="315" src="https://www.bilibili.com/blackboard/html5mobileplayer.html?bvid=BV1Ze411N75S&page=1&high_quality=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="500"></iframe>!!

<h4 style="font-size: 1.714em; line-height: 1.1666em; margin-bottom: .4555em; letter-spacing: .04em; padding-top: 1em; margin-top: -.75em">Spine-Unity Timeline Playables</h4>!!

![](/img/spine-runtimes-guide/spine-unity/timeline/add-menu.png)

Spine Timeline 目前提供三种类型的时间轴 Playables:  
- `SkeletonAnimation Track` *(用于 `SkeletonAnimation` 动画)*,
- `SkeletonGraphic Track` *(用于 `SkeletonGraphic` 动画)*,
- `Skeleton Flip Track` *(用于翻转 `SkeletonAnimation` 或 `SkeletonGraphic`)*.

> 请注意: 为提高可读性, 我们在最新版本的扩展包中重新命名了各Timeline轨道.  
`SkeletonAnimation Track` 更名为 `Spine AnimationState Track`,  
`SkeletonGraphic Track` 更名为 `Spine AnimationState Graphic Track`,  
`Skeleton Flip Track` 更名为 `Spine Skeleton Flip Track`.

**功能限制:** 目前只支持 [SkeletonAnimation](/spine-unity-main-components#SkeletonAnimation组件) 和 [SkeletonGraphic](/spine-unity-main-components#SkeletonGraphic组件) 组件. 时间轴扩展当前并未提供对  [SkeletonMecanim](/spine-unity-main-components#SkeletonMecanim组件) 组件的支持.

## SkeletonAnimation Track与SkeletonGraphic Track

![](/img/spine-runtimes-guide/spine-unity/timeline/animationstate-track.png)  

这两种轨道是用来给 `SkeletonAnimation` 或 `SkeletonGraphic` 的AnimationState设置动画的. `SkeletonAnimation Track` 用于 `SkeletonAnimation`,而 `SkeletonGraphic Track` 则用于 `SkeletonGraphic`.

![](/img/spine-runtimes-guide/spine-unity/timeline/animationstate-track-inspector.png)  

**参数**
- *Track Index.* 指定需要设置动画的AnimationState轨道的索引. 当使用多个时间轴轨道时别忘了指定该值.
> **重要提示:** 时间轴轨道的次序代表了动画的叠放次序: 顶部轨道是基轨道, 下面的轨道是叠加轨道. 如果无视轨道排序, 那么会导致编辑器预览中显示出错误的效果.

- *Unscaled Time.* 每当在该轨道开始播放新的动画片段时, `SkeletonAnimation.UnscaledTime`(或`SkeletonGraphic.UnscaledTime`)将被置为该值. 如此便既可按常规游戏速度亦可按无缩放速度在时间轴上回放动画片段. 请注意, `PlayableDirector.UpdateMethod` 将被该属性完全覆盖(其值将被忽略), 因为这样才能对每根时间轴轨道进行更精细的控制.

### Spine Animation State Clip

可以通过将 `AnimationReferenceAsset` 拖拽到时间轴轨道上, 来将 `Spine Animation State Clip`添加到 `SkeletonAnimation Track` (或 `SkeletonGraphic Track`)中. 关于如何为 `SkeletonDataAsset` 生成 `AnimationReferenceAssets`, 请参见[SkeletonData - 预览页面](/spine-unity-assets#预览页面)一节.

![](/img/spine-runtimes-guide/spine-unity/timeline/animationstate-clip-inspector.png)  

**参数**  
*Clip Timing*
- *Clip In.* 播放此动画局部开始时间的偏移量. 也可以通过拖动片段(clip)的左边缘来调整.
- *Blend In Duration.* 启用 `Use Blend Duration` 且禁用 `Default Mix Duration` 时将使用该参数. 可以通过把片段叠到前一个片段上来调整该时长, 在两个片段的过渡处会出现表示淡入淡出的三角形.
- *Speed Multiplier.* 播放速度的倍率. 当置为2.0时, 将以两倍速播放动画, 当置为0.5时, 以半速播放.

*Spine Animation State Clip*
- *Don't Pause with Director.* 若置为true, 即使暂停Director也将继续播放动画.
- *Don't End with Clip.* 通常情况下动画片段后若是空白时间轴, 则会使用空动画填充轨道. 但当此参数置为 true 则会继续播放动画片段.
- *Clip End Mix Out Duration.* 当 `Don't End with Clip` 置为false时, 若片段后为空或需要停止播放, 就会按 `MixDuration` 置入一个空动画用于过渡. 当该值小于0时会直接暂停播放片段.

*Mixing Setting*
- *Default Mix Duration.* 当禁用时, 将 `Mix Duration` 值作用于上一段动画到当前动画的过渡. 当启用时, 则使用该动画在SkeletonData资产处设置的 `Mix Duration` 值.
- *Use Blend Duration.* 当启用时, `Mix Duration` 值将等于时间轴片段的过渡时长 'Ease In Duration'. 启用此值后, 可以通过把片段叠到前一个片段上来调整过渡时长, 在两个片段的过渡处会出现表示淡入淡出的三角形.
- *Mix Duration.* 当禁用 *Default Mix Duration* 时, 上一个动画到当前动画的过渡将采用该时长.
- *Event Threshold.* 详见 [TrackEntry.EventThreshold](/spine-api-reference#TrackEntry-eventThreshold).
- *Attachment Threshold.* 详见 [TrackEntry.MixAttachmentThreshold](/spine-api-reference#TrackEntry-mixAttachmentThreshold).
- *Draw Order Threshold.* 详见 [TrackEntry.MixDrawOrderThreshold](/spine-api-reference#TrackEntry-mixDrawOrderThreshold).
- *Alpha.* 详见 [TrackEntry.Alpha](/spine-api-reference#TrackEntry-alpha).

*Ignored Parameters*
- *Ease Out Duration, Blend Curves*. 忽略该参数, 不产生任何影响.

> 请注意: *Default Mix Duration* 曾用名为 *Custom Duration* 且老旧两个变量其值互斥. 为了提高可读性, 已将其重命名.

**使用方法**
1. 将 `SkeletonAnimationPlayableHandle` 组件添加到SkeletonAnimation 的 GameObject 上, 如果是 `SkeletonGraphic` 则会添加 `SkeletonGraphicPlayableHandle`.
2. 在已有Unity Playable Director时, 在Unity Timeline窗口中右击左侧的空白区域, 选择 `Spine` - `SkeletonAnimation Track`.
3. 把SkeletonAnimation或SkeletonGraphic GameObject拖到新Spine AnimationState Track的空白引用属性上.
4. 可以像对待普通动画片段一样, 将对应的 [`AnimationReferenceAsset`](/spine-unity-assets#预览页面) 拖到clips视图(时间轴面板的右侧)中即可在轨道上添加动画.

请参考 spine-unity 运行时文档的[预览页面](/spine-unity-assets#预览页面)一节, 详细了解如何为每个动画创建 `AnimationReferenceAsset`.

> **请注意:** 你可以使用复制功能(`CTRL`/`CMD` + `D`)在clips视图中复制选中的片段.

**轨道行为**
- 每个片段开始时都将调用 `AnimationState.SetAnimation()` 来设置 `AnimationReferenceAsset`.
- 从Timeline 4.0版本开始, 片段的时长会被轨道行为纳入考虑.
	> 请注意: 3.8版认为片段时长并不重要. 即使时间轴上没有后续动画片段, 时间轴也不会清空动画.
- 空动画: 如果一段没有动画片段没有 `AnimationReferenceAsset`, 则将调用 `SetEmptyAnimation`.
- 错误处理: 如果动画片段找不到其 `AnimationReferenceAsset`, 它将不执行任何行为(但前一动画会保持正常播放).
- 在正在播放的动画将不会在时间轴开始时被中断, 开始播放第一个动画片段时才会中断播放.
- 在动画片段结束和时间轴结束时的行为与片段设置有关. 当启用了 `Don't End with Clip` 时, 在片段结束时不执行任何操作. 这意味着最后一个片段中 `SetAnimation` 调用的效果将持续到AnimationState触发其他调用. 如果 `Don't End with Clip` 被禁用, 它将按 `Clip End Mix Out Duration` 设置的时长mix到空动画, 但若 `Clip End Mix Out Duration` 小于0则会暂停播放.
- Edit模式预览的mix效果可能看起来与Play模式的mix效果不同. 最终效果以Play模式下的结果为准. 详情请参阅[SkeletonAnimation Track](#SkeletonAnimation-Track与SkeletonGraphic-Track), 其中详述了多根轨道重叠的状况下应如何在预览时正确排序各轨道.

## Skeleton Flip Track

![](/img/spine-runtimes-guide/spine-unity/timeline/skeleton-flip-track.png)  

该轨道类型用于翻转 `SkeletonAnimation` 或 `SkeletonGraphic` 组件中的skeleton.

### Spine Skeleton Flip Clip

![](/img/spine-runtimes-guide/spine-unity/timeline/skeleton-flip-clip-inspector.png)  

**Parameters**
- *Flip X.* 在片段持续时间里横向翻转skeleton(X轴).
- *Flip Y.* 在片段持续时间里纵向翻转skeleton(Y轴).

**使用方法**
1. 将 `SkeletonAnimationPlayableHandle` 组件添加到你的 `SkeletonAnimation` GameObject 上, 如果用的是 `SkeletonGraphic` 则添加 `SkeletonGraphicPlayableHandle`.
2. 在已有Unity Playable Director时, 在Unity Timeline窗口中右击左侧的空白区域, 选择 `Spine` - `Skeleton Flip Track`.
3. 把SkeletonAnimation或SkeletonGraphic GameObject拖到新Spine Skeleton Flip Track的空白引用属性上.
4. 在Timeline的摄影表(dopesheet)中的空行上点击右键, 选择 `Add Spine Skeleton Flip Clip`.
5. 调整新片段的开始和结束时间, 在检查器顶部为它命名, 并指定FlipX和FlipY的值.

**轨道行为**
- skeleton的翻转值将在每根轨道中的每一帧上生效.
- 在时间轴结束时, Flip轨道将把skeleton的翻转恢复到时间轴开始时的状态. 

## 已知问题
- 控制台会报一个无关痛痒的小错: `DrivenPropertyManager has failed to register property "m_Script" of object "Spine GameObject (spineboy-pro)" with driver "" because the property doesn't exist.`. 但这是个Unity的bug. 详情请见: https://forum.unity.com/threads/default-playables-text-switcher-track-error.502903/

[下一节: 懒加载扩展](/spine-unity-on-demand-loading)
[上一节: 渲染](/spine-unity-rendering)