5.3 Timeline 5.3 Unity Timeline – 打造动态游戏体验的强大时间轴工具 Unity Timeline 是一个强大的可视化编辑工具,它允许开发者创建电影级的游戏过场动画、动态的游戏内事件、以及复杂的动画序列。Timeline 通过直观的时间轴界面,将动画、音频、脚本事件等元素组织起来,极大地简化了复杂动态内容的制作流程。本章节将深入探讨 Unity Timeline 的核心概念、使用方法以及代码实践,帮助你掌握这个强大的工具,为你的游戏增添更丰富的动态表现力。 5.3.1 Timeline 核心概念详解 在深入 Timeline 的具体操作之前,我们首先需要理解其核心概念。Timeline 的工作原理是基于时间轴的概念,将各种游戏元素在时间线上进行编排和控制。
5.3 Unity Timeline – 打造动态游戏体验的强大时间轴工具
Unity Timeline 是一个强大的可视化编辑工具,它允许开发者创建电影级的游戏过场动画、动态的游戏内事件、以及复杂的动画序列。Timeline 通过直观的时间轴界面,将动画、音频、脚本事件等元素组织起来,极大地简化了复杂动态内容的制作流程。本章节将深入探讨 Unity Timeline 的核心概念、使用方法以及代码实践,帮助你掌握这个强大的工具,为你的游戏增添更丰富的动态表现力。
5.3.1 Timeline 核心概念详解
在深入 Timeline 的具体操作之前,我们首先需要理解其核心概念。Timeline 的工作原理是基于时间轴的概念,将各种游戏元素在时间线上进行编排和控制。以下是 Timeline 中最重要的几个核心概念:
Timeline Asset (时间轴资源): Timeline Asset 是存储时间轴所有信息的载体,它是一个 .playable 扩展名的资源文件。你可以将其视为一个“剧本”,定义了整个动态序列的结构和内容。Timeline Asset 中包含了轨道 (Tracks) 和剪辑 (Clips) 等信息,是 Timeline 编辑器操作和运行时播放的基础。
Playable Director (可播放导演): Playable Director 是一个 Unity 组件,你需要将其添加到场景中的 GameObject 上,才能播放 Timeline Asset。Playable Director 负责控制 Timeline Asset 的播放、暂停、停止、时间控制等。它是 Timeline 在运行时与游戏逻辑交互的桥梁。一个场景中可以有多个 Playable Director,每个 Director 可以控制不同的 Timeline Asset,实现复杂的动态场景控制。
Tracks (轨道): 轨道是 Timeline 的基本组织单位,它类似于音频编辑软件中的轨道。轨道用于组织和控制特定类型的游戏元素。Timeline 提供了多种类型的轨道,例如:
Animation Track (动画轨道): 用于控制 GameObject 的动画,你可以将动画片段拖拽到动画轨道上,并调整其播放时间、速度等参数。
Activation Track (激活轨道): 用于控制 GameObject 的激活和禁用状态,可以在时间轴上精确控制 GameObject 何时显示和隐藏。
Audio Track (音频轨道): 用于播放和控制音频片段,可以调整音频的音量、混音等参数,实现音画同步。
Control Track (控制轨道): 功能强大的轨道,可以控制 Prefab 的实例化和销毁、粒子系统的播放和停止、甚至是调用脚本中的自定义方法。
Signal Track (信号轨道): 用于在时间轴上的特定时间点发送信号 (Signal),信号可以被其他 GameObject 或脚本接收,触发相应的事件或行为,实现时间轴与游戏逻辑的联动。
Custom Track (自定义轨道): 允许开发者通过脚本创建自定义轨道类型,扩展 Timeline 的功能,满足特定的项目需求。
Clips (剪辑): 剪辑是轨道上的基本单元,它代表了时间轴上的一个时间段以及在该时间段内发生的事件或动作。剪辑的类型取决于所在的轨道类型。例如,动画轨道上的剪辑是动画片段,音频轨道上的剪辑是音频片段,激活轨道上的剪辑是激活/禁用状态。你可以调整剪辑的长度、位置、速度等参数,精确控制其在时间轴上的行为。
Bindings (绑定): 绑定是将 Timeline 中的轨道与场景中的 GameObject 或组件连接起来的过程。例如,你需要将动画轨道绑定到一个 GameObject,才能控制该 GameObject 的动画。绑定操作在 Playable Director 组件中进行,你需要将场景中的 GameObject 拖拽到 Playable Director 组件的绑定槽位上,建立轨道与 GameObject 之间的关联。
5.3.2 Timeline 编辑器操作详解
Unity Timeline 编辑器是一个直观易用的可视化界面,用于创建和编辑 Timeline Asset。你可以通过菜单栏 "Window" -> "Timeline" 打开 Timeline 编辑器窗口。
5.3.2.1 创建 Timeline Asset 和 Playable Director
创建 Timeline Asset: 在 Project 窗口中,右键单击,选择 "Create" -> "Timeline" -> "Timeline"。 输入 Timeline Asset 的名称,例如 "MyTimeline"。
创建 Playable Director: 在 Hierarchy 窗口中,右键单击,选择 "3D Object" -> "Create Empty"。 将新创建的 GameObject 重命名为 "TimelineDirector" (或其他你喜欢的名字)。选中 "TimelineDirector" GameObject,在 Inspector 窗口中点击 "Add Component" 按钮,搜索并添加 "Playable Director" 组件。
绑定 Timeline Asset: 选中 "TimelineDirector" GameObject,在 Playable Director 组件的 "Playable" 属性栏中,将刚刚创建的 "MyTimeline.playable" 文件从 Project 窗口拖拽到该属性栏。
现在,你已经成功创建了一个基本的 Timeline 设置。你可以双击 Project 窗口中的 "MyTimeline.playable" 文件,打开 Timeline 编辑器,开始编辑你的时间轴序列。
5.3.2.2 Timeline 编辑器界面介绍
Timeline 编辑器窗口主要由以下几个区域组成:
Timeline 窗口标题栏: 显示当前编辑的 Timeline Asset 的名称,以及一些常用的操作按钮,例如 "Play" (播放), "Pause" (暂停), "Stop" (停止), "Record" (录制) 等。
Tracks 区域 (轨道区域): 位于 Timeline 编辑器窗口的左侧,显示当前 Timeline Asset 中包含的所有轨道。你可以通过点击 "+" 按钮添加新的轨道,或者右键单击轨道列表进行轨道管理 (例如重命名、删除、排序等)。
Timeline 区域 (时间轴区域): 位于 Timeline 编辑器窗口的右侧,是编辑时间轴序列的主要区域。时间轴区域以时间刻度为横轴,轨道为纵轴,显示了各个轨道上的剪辑和标记。你可以在时间轴区域中拖拽、调整剪辑的位置和长度,添加和编辑关键帧,创建动画曲线等。
Preview 区域 (预览区域): 位于 Timeline 编辑器窗口的底部,用于预览当前时间轴序列的播放效果。你可以通过拖动时间轴滑块或点击 "Play" 按钮来预览动画效果。
5.3.2.3 添加和编辑轨道与剪辑
添加轨道: 在 Tracks 区域,点击 "+" 按钮,选择要添加的轨道类型。例如,选择 "Animation Track" 添加一个动画轨道。
绑定轨道: 对于动画轨道、激活轨道等需要绑定的轨道,你需要将其绑定到场景中的 GameObject。选中新添加的轨道,在 Inspector 窗口中,将要绑定的 GameObject 从 Hierarchy 窗口拖拽到 "Binding" 属性栏。
添加剪辑: 将资源 (例如动画片段、音频片段) 从 Project 窗口拖拽到对应的轨道上,即可创建剪辑。例如,将一个动画片段拖拽到动画轨道上,即可创建一个动画剪辑。
编辑剪辑:
移动剪辑: 拖拽剪辑可以在时间轴上移动剪辑的位置。
调整剪辑长度: 拖拽剪辑的左右边缘可以调整剪辑的长度。
剪辑属性: 选中剪辑,可以在 Inspector 窗口中编辑剪辑的属性,例如动画剪辑的速度、混合模式等。
关键帧 (动画轨道): 对于动画轨道上的剪辑,你可以添加和编辑关键帧来控制动画的细节。双击动画剪辑可以打开 Animation 窗口,在 Animation 窗口中可以添加和编辑关键帧,创建动画曲线。
混合和过渡 (动画轨道): 在动画轨道上,你可以通过调整剪辑之间的重叠区域来创建动画混合和过渡效果。
5.3.2.4 使用 Control Track 控制 Prefab 和粒子系统
Control Track 是 Timeline 中非常强大的轨道类型,它可以控制 Prefab 的实例化和销毁、粒子系统的播放和停止等。
控制 Prefab 实例化和销毁:
添加一个 Control Track。
将要实例化的 Prefab 从 Project 窗口拖拽到 Control Track 上,创建一个 Control Clip。
调整 Control Clip 的位置和长度,控制 Prefab 的实例化时间和持续时间。
在 Control Clip 的 Inspector 窗口中,可以设置 Prefab 的实例化行为 (例如实例化在世界坐标还是局部坐标)。
控制粒子系统播放和停止:
添加一个 Control Track。
将包含粒子系统的 GameObject 拖拽到 Control Track 上,创建一个 Control Clip。
调整 Control Clip 的位置和长度,控制粒子系统的播放时间。
在 Control Clip 的 Inspector 窗口中,可以选择控制粒子系统的 "Play" (播放), "Stop" (停止), "Pause" (暂停), "Resume" (恢复) 等操作。
5.3.2.5 使用 Signal Track 发送信号和接收事件
Signal Track 允许你在时间轴上的特定时间点发送信号,信号可以被其他 GameObject 或脚本接收,触发相应的事件或行为,实现时间轴与游戏逻辑的联动。
创建 Signal Asset: 在 Project 窗口中,右键单击,选择 "Create" -> "Timeline" -> "Signal Asset"。 输入 Signal Asset 的名称,例如 "MySignal"。
创建 Signal Track: 在 Timeline 编辑器中,点击 "+" 按钮,选择 "Signal Track" 添加一个信号轨道。
添加 Signal Emitter: 在 Signal Track 上,右键单击要发送信号的时间点,选择 "Add Signal Emitter"。 在 Inspector 窗口中,将刚刚创建的 "MySignal.signal" 文件拖拽到 "Asset" 属性栏。
创建 Signal Receiver: 在场景中选择一个 GameObject,点击 "Add Component" 按钮,搜索并添加 "Signal Receiver" 组件。
绑定 Signal Receiver 和 Signal Emitter: 在 Signal Receiver 组件中,点击 "+" 按钮添加一个新的 "Signal Reaction"。 将 "MySignal" Signal Asset 拖拽到 "Signal" 属性栏。 在 "Reaction" 区域,选择要触发的事件类型 (例如 "UnityEvent"),并配置相应的事件回调函数。
现在,当 Timeline 播放到 Signal Emitter 的时间点时,Signal Receiver 组件将接收到 "MySignal" 信号,并执行配置的事件回调函数,实现时间轴与游戏逻辑的联动。
5.3.3 Timeline 代码实践
除了在 Timeline 编辑器中进行可视化操作外,我们还可以通过代码来控制和扩展 Timeline 的功能。
5.3.3.1 使用 PlayableDirector 控制 Timeline 播放
你可以通过 PlayableDirector 组件的脚本接口来控制 Timeline 的播放、暂停、停止、时间控制等。
using UnityEngine; using UnityEngine.Playables; public class TimelineController : MonoBehaviour { public PlayableDirector playableDirector; void Start() { // 确保 Playable Director 组件已绑定 if (playableDirector == null) { playableDirector = GetComponent<PlayableDirector>(); } } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { // 播放 Timeline playableDirector.Play(); } if (Input.GetKeyDown(KeyCode.P)) { // 暂停 Timeline playableDirector.Pause(); } if (Input.GetKeyDown(KeyCode.S)) { // 停止 Timeline playableDirector.Stop(); } if (Input.GetKey(KeyCode.LeftArrow)) { // 快退 Timeline playableDirector.time -= Time.deltaTime * 10f; playableDirector.Evaluate(); // 手动评估时间轴,更新状态 } if (Input.GetKey(KeyCode.RightArrow)) { // 快进 Timeline playableDirector.time += Time.deltaTime * 10f; playableDirector.Evaluate(); // 手动评估时间轴,更新状态 } } }
5.3.3.2 脚本化 Playable Track 和 Playable Clip
你可以通过脚本创建自定义的 Playable Track 和 Playable Clip,扩展 Timeline 的功能,实现更高级的控制逻辑。这涉及到使用 Playables API,这是一个相对高级的主题,我们这里只做一个简单的介绍。
自定义 Playable Track: 你需要创建一个继承自 TrackAsset 的 C# 脚本,定义自定义轨道的行为和属性。
自定义 Playable Clip: 你需要创建一个继承自 PlayableAsset 的 C# 脚本,定义自定义剪辑的行为和属性。在自定义 Playable Clip 中,你可以创建自定义的 PlayableBehaviour,实现剪辑的逻辑。
PlayableBehaviour: PlayableBehaviour 是控制剪辑运行时行为的关键脚本。你需要在 PlayableBehaviour 中实现 OnGraphStart, ProcessFrame, OnGraphStop 等回调函数,处理剪辑的开始、帧更新和结束逻辑。
mermaid graph TD 图示例 (Timeline 结构):
5.3.4 Timeline 应用场景
Unity Timeline 在游戏开发中有着广泛的应用场景,以下是一些常见的例子:
游戏过场动画 (Cutscenes): Timeline 是制作电影级游戏过场动画的理想工具。你可以使用 Timeline 精确控制角色动画、镜头运动、音频、特效等元素,打造引人入胜的叙事体验。
动态游戏事件: Timeline 可以用于创建动态的游戏内事件,例如场景切换、角色出场、环境变化、Boss 战阶段切换等。通过 Timeline 的精确时间控制和信号系统,可以实现复杂的事件触发和联动。
角色动画序列: Timeline 可以用于制作复杂的角色动画序列,例如连击技能、角色入场动画、死亡动画等。你可以将多个动画片段组合在一起,并使用 Timeline 的混合和过渡功能,创建流畅自然的动画效果。
UI 动画: Timeline 可以用于制作 UI 动画,例如界面淡入淡出、按钮动画、提示信息动画等。通过 Timeline 的激活轨道和动画轨道,可以轻松创建各种 UI 动画效果,提升用户体验。
环境动画: Timeline 可以用于制作环境动画,例如树叶飘落、水面波动、云朵移动、灯光闪烁等。通过 Timeline 的控制轨道和动画轨道,可以为游戏场景增添生机和活力。
5.3.5 总结
Unity Timeline 是一个功能强大且易于使用的时间轴工具,它极大地简化了游戏动态内容的制作流程。通过本章节的学习,你应该已经掌握了 Timeline 的核心概念、编辑器操作以及代码实践。掌握 Timeline 将使你能够更高效地创建电影级的游戏过场动画、动态的游戏事件以及各种复杂的动画序列,为你的游戏增添更丰富的表现力和沉浸感。 不断探索和实践 Timeline 的各种功能,你将发现它在游戏开发中的无限潜力。