在Unity中介绍时间表

[本教程包含大约50 MB的图像,包括GIF动画]

开发人员经常使用过场动画来讲述游戏的部分情节或吸引玩家。 一些游戏使用高度详细的模型来创建经过特殊渲染的动画场景,而另一些则使用真实的游戏中模型。 由于使用了游戏内模型,您可以节省大量金钱和时间,因为您不必专门为过场动画创建新的模型,装备和动画。 但是,即使您使用现成的模型,也不意味着您需要牺牲特效或戏剧! Unity具有强大的工具来创建令人兴奋的过场动画-Unity时间轴!

在本教程中,您将了解时间轴并学习如何通过动画和摄影机移位创建过场动画。

开始工作


从此处下载项目草案和完成的项目。

打开Starter Project文件并加载Main场景。 她将成为我们的基础。 里面有个英雄,站在塔上看着世界:


在您的帮助下,他将能够从塔上跳下来,转身,去到藏宝箱,然后用脚踢将其打开。 通过这些动画,相机还将改变其位置。 以下是完成的场景:


什么是时间表?


在本教程中,我们将使用Unity时间轴-但是什么是时间轴? 时间轴是一个带有时间轴组件的GameObject,可以在Unity时间轴窗口中进行编辑,该窗口可控制动画的关键帧和对象的生命周期。 当使用Unity时间轴创建过场动画时,我们设置动画关键点并确定它们何时应工作。 在本教程中,我们还将使用AnimationController,可以将其视为动画关键帧的超集。

当角色执行动画(例如行走)时,对象的每个单独的移动顶点必须指示其路径。 在本教程中,我们将不参与模型的创建和装配动画-我们已经完成了所有工作。 但是,知道手动设置动画关键帧或使用AnimationController时,它们本质上是相同的:在给定时间点对象的位置。 时间轴控制所有这些移动以创建场景。 当您开始了解Unity时间轴时,您将了解所有这些内容。

但是在您深入研究之前,对“时间轴”窗口进行简要概述会很有用。 查看图片并阅读数字下的描述:


  1. 时间轴资产:这是一条映射到层次结构中GameObject的轨道。 它存储与此GameObject关联的关键帧,用于执行动画或确定GameObject是否处于活动状态。
  2. 关联的GameObject:这是与轨迹关联的GameObject。
  3. 帧:这是当前设置的时间轴帧。 当需要更改动画时,可以在开始帧和结束帧中设置关键帧。
  4. 轨道组:增加场景的比例也会增加轨道数。 您可以通过对轨道进行分组来组织它们。
  5. 记录按钮:当此按钮处于活动状态时,我们可以更改当前帧并设置场景中GameObject的位置和/或旋转。 更改将被记录。
  6. 曲线图标:单击此图标将打开“曲线”窗口,您可以在其中微调动画的关联关键帧的细节,以所需的方式更改它们。

到目前为止,如果您觉得这些信息对您来说太过复杂,请不要担心-在完成本教程的过程中,我们将返回此信息。 在此阶段,最重要的是要记住“时间轴”窗口的位置,并且当您选择“ GameObject时间轴”时,您可以访问“时间轴”窗口。

灯光,相机,马达!


加载主场景后,单击“播放”。 您应该看到英雄站在塔顶上:


这是在“动画”控制器中指定的默认动画。 在本教程中,我们将使用预先创建的动画,因此您无需担心模型,动画或控制器的内部结构。 但是,如果您想了解这一过程,可以研究我们的教程Unity Animation简介

创建时间轴类型的GameObject


第一步是创建GameObject 时间轴 。 通过在Hierarchy窗口中右键单击(在按住Command的Mac上)并选择Create Empty创建一个空的GameObject 。 因此,我们将GameObject添加到场景中并选择它:


在不从GameObject中删除选择的情况下,打开Window菜单并选择Timeline 。 将打开“时间轴”窗口。 单击创建按钮 ,将打开保存对话框。 将文件名更改为时间轴 ,然后单击保存:


通过单击将GameObject重命名时间轴 ,按F2键并输入时间轴


我们创建了一个GameObject时间轴,将协调过场动画中的所有动画和相机更改。 在引擎内部,Unity将名为Timeline.playable的资产文件保存到磁盘。 在GameObject时间轴中,Unity添加了Playable DirectorAnimator组件。

Playable Director组件包含一个附加到我们刚刚保存的时间轴资产的Playable字段。 理论上,Unity添加的Animator组件应允许我们为GameObject时间轴设置动画,但是我们不会这样做,因此您可以忽略它。

在继续之前,我想将“ 时间轴”选项卡拖到屏幕底部。 这将允许我们同时打开“场景”和“时间轴”窗口:


选择“ GameObject 时间轴”,然后返回“时间轴”窗口。 现在,我们有一个GameObject时间轴的动画轨道 。 我们不需要它,因此您可以选择它,然后按Delete键将其删除:


动画跳跃!


现在我们准备开始动画。 展开GameObject Hero以查看GameObject 模型 。 选择GameObject 时间轴 。 将GameObject 模型拖到“时间轴”窗口中; 这将打开轨道菜单,因此选择Animation Track 。 对GameObject Hero重复此步骤:


注意:为了正确使用零局部空间,我们同时添加了Hero和Model。 GameObject Hero是GameObject Model的容器,它使您可以播放动画而不影响播放动画的位置。 当我们需要移动英雄时,我们将为GameObject Hero设置动画。 当角色需要动画时-移动时可以做什么-我们将使用GameObject模型。 如果没有这种父子关系,则如果未将Hero对象配置为子对象,则Model对象播放的动画将错误地覆盖Hero对象的运动参数。

记录关键帧


由于GameObject Hero轨迹代表了英雄的位置,因此我们需要将其位置设置为初始关键帧。

在“时间轴”窗口中选择英雄曲目 ,然后单击“ 录制”按钮 (红色圆圈)以开始录制。 在“层次结构”窗口中选择GameObject Hero并将其X位置设置为-1 ,然后立即将其X位置设置为0

返回到“时间轴”窗口,然后按英雄轨道上的“录制”按钮以完成录制 。 因此,我们为英雄的初始位置添加了一个关键帧:


在我们的项目中,英雄已经处于他应该开始的位置。 但是,除非更改位置,否则在录制为关键帧时不会注册该位置。 因此,如果在录制时需要为已经有关键帧的位置设置关键帧,只需移动它并返回它以进行注册。

最简单的方法是将对象的“ X位置”相对于其当前位置设置为-1,然后将值返回到其位置。 在本教程中,我们将多次使用此技巧。

接下来,我们需要英雄等待100帧才能从塔上跳下来。 目前,我们仅设置了英雄的初始位置,但是我们需要在100帧后给英雄相同的位置(即在塔顶)。 否则,Unity将立即开始插补运动。

和以前一样,选择GameObject Timeline ,但是这一次您需要单击窗口顶部的frame字段输入“ 100” 。 因此,我们将关键帧移至第100帧。

按下“英雄”曲目的“ 录制”按钮。 选择GameObject Hero,然后在“检查器”窗口的“变换”字段中, 将其X位置设置为-1,然后立即返回到0 。 再次按录制按钮以停止录制。


因此,我们已经设置了Hero的初始关键帧,并准备继续使用动画。

添加动画剪辑


定义位置数据

首先,我们需要设置位置数据。

单击GameObject 时间轴以将其选中。 在“时间轴”窗口中,通过在“模型”轨道上单击鼠标右键(在Mac上单击Command)并选择“ 从动画剪辑添加” ,将“ 动画”添加到“模型”轨道。 现在选择“ 空闲”动画:


接下来,我们为英雄从塔上跳下来设置动画,但首先我们需要将他上下移动,越过栏杆,然后再向下移动到地面。

为此,首先选择“时间轴”窗口,然后转到框138 。 按英雄轨道上的记录按钮。 现在选择GameObject Hero 。 在“检查器”窗口的“变换”字段中,将“ Y位置”设置为3.934,将“ Z位置”设置为1.97

返回到“时间轴”窗口并转到第176帧 。 再次选择GameObject Hero并将Y位置设置为0,Z位置设置为5.159 。 按下“ 录制”按钮完成录制:


保存场景并单击“ 播放”以查看工作结果!


添加动画

我们设置这些位置,但不设置动画。 现在我们要做。

选择“时间轴”窗口后,在“ 模型”轨道上右键单击(在Mac上,按住Command键),然后单击“ 从动画剪辑添加” ,然后选择“ 跳转” 。 因此,您可以在“空闲”动画之后立即添加“跳转”动画。

拖动Jump动画的右侧,使其位于第176帧中。 现在,我们将添加另一个Animation Clip ,但是这次我们将添加Land动画(您无需更改其长度,只需添加它):


保存场景,单击“播放”,然后查看结果!


添加相机


英雄从塔上跳下来后,跟随动作有些困难,因此是使用相机的合适时机。

在“层次结构”窗口中,将MainCamera重命名为Camera1 。 选择GameObject 时间轴 。 将Camera1拖到 “时间轴”窗口,这将打开轨道选择菜单; 选择激活跟踪 。 拖动Camera1的活动通道,使其在第157帧处结束:


提示:可以使用时间轴检查器中的帧计数器字段来设置当前帧标记。 如果将标记设置在要拖动轨道的框架上,则轨道将附着在框架标记上。

场景中GameObject的活动或不活动由激活轨迹控制。 现在,我们的主摄像机将在第157帧后关闭。单击播放,然后查看结果:


现在我们将添加另一个摄像头,只有它会跳过塔的栏杆后向下看以显示英雄。

在“层次结构”窗口中,选择Camera1并通过按Control-D (在Mac上为Command-D)进行复制。 将重复项重命名为Camera2禁用它。

在本教程中,我们将使用另外两个摄像机,因此,我们现在通过重复相同的算法来创建它们。 将它们重命名为Camera3和Camera4并断开连接。 之后,应关闭除Camera1以外的所有Camera游戏对象。 层次结构如下所示:


现在我们将放置Camera2。 选择Camera2,然后在“检查器”窗口的“变换”字段中将“ Y位置”设置为10.75,将“ Z位置”设置为2.84 。 将X旋转设置为79.5


对于Camera1,选择“ 时间轴”窗口,然后将“ Camera2”对象从“层次结构”拖动到该窗口中。 轨道选择菜单再次出现,因此选择激活轨道 。 拖动活动条 ,使其在Camera1激活完成后立即开始(框架158)。 拖动Camera2的“ 活动”轨道的右侧,使其在第216帧处结束。

保存场景,单击“播放”,然后观看场景中摄像机的更改。


现在是时候去找宝了!


我们看胸部


现在我们的英雄已经降落在地面上,他必须转向宝箱并开始行走。

选择GameObject 时间轴并设置帧202 。 在英雄轨道中按“ 录制”按钮开始录制。

选择GameObject Hero,然后在“检查器”窗口的“变换”字段中, 将“ Y Rotation”设置为-1,然后立即将其值更改回0,以设置GameObject Hero旋转的初始关键帧。

完成后,再次选择GameObject时间轴并设置帧216 。 再次选择GameObject Hero,然后在“检查器”窗口的“变换”字段中, 将“ Y旋转”设置为-90

注意:位置和旋转关键帧相互独立设置。 以前,当我们设置英雄的初始位置时,该回合的关键帧没有保存,因此我们需要先设置一个新帧,然后再朝着宝物的方向移动到所需的回合。

此外,英雄此时应处于等待状态,因此请将“ 空闲”动画添加到“ 模型动画轨道”中,并使其持续到第216帧:


因此,我们的英雄已经登陆并准备寻找宝藏。 现在是时候向他敞开胸膛了!

提示:如果“时间轴”轨迹太大,则可以旋转鼠标滚轮以更改其比例。 要向左或向右移动,请在按住鼠标中键的同时向左或向右移动。

我们正在接近宝藏


选择游戏对象时间线并设置帧216 。 按英雄轨道上的“ 录制”按钮开始录制。

选择GameObject Hero ,然后在“检查器”窗口的“变换”字段中将“ X位置”设置为-1 ,然后再次返回0以设置起始位置的关键帧。 接下来在时间轴上,选择英雄轨道上的第361帧。

返回GameObject Hero,然后在“检查器”窗口的“变换”字段中将“ X位置”设置为-6 。 返回英雄曲目并结束录制。

最后,按照与之前相同的步骤,为Model对象提供Walk动画,然后将其拉伸到第361帧


您可能会注意到,英雄似乎遍历宝库,但实际上这是时间轴预览的一个问题,因为正如我们很快将看到的那样,英雄会直接走到箱子前停下来。

为了防止Camera2跟随英雄的整个路径,我们现在可以使用Camera3从英雄的背后射击。

为此,请在“层次结构”窗口的主菜单中,选择Camera3并将其拖到GameObject Hero内的GameObject Model上 ,以使摄像机成为其子级。

设置Camera3位置(X:0,Y:2.06,Z:-2.5) 。 转一圈(X:0,Y:0,Z:0) 。 层次结构应如下所示:


由于Camera3现在是GameObject Model的子代,因此它将重复GameObject Model的所有动作,从后面看。 但是,Camera3仍需要一个激活轨迹,以便在正确的时间激活。

GameObject Camera3拖到时间轴并选择Activation Track ,就像对Camera1和Camera2所做的那样。 将Camera3的起始帧设置为Camera2 结束帧,并将该终止帧设置为Camera3到 361


现在保存场景,单击“ 播放” ,看看结果如何:


我们已经完成了几乎所有工作! 现在,英雄只需要张开胸膛……当然要踢他!

打开箱子


对于最终视图,我们使用Camera4,以与Camera1和Camera2相同的方式进行设置。

Camera4拖到时间轴并添加激活跟踪 。 将Camera4的起始帧设置为Camera3活动阶段的末尾,并将其扩展到帧555 。 它看起来应该像这样:


添加动画。 在“模型”轨道上右键单击(在Mac上,按住Command键)。 选择“ 从剪辑添加动画” ,然后选择“ 踢” 。 请勿更改持续时间。 现在,模型轨道应如下所示:


我们需要打开箱子,所以现在我们将为其封面添加一个动画。 设置此动画类似于我们之前所做的。

在“层次结构”窗口中展开GameObject ChestBottom 。 将GameObject ChestLid拖动到时间轴,然后选择“ 动画轨道” 。 在时间轴中,设置帧389 。 现在选择ChestLid轨道。 单击记录按钮

现在录制正在进行中在“层次结构”窗口中选择GameObject ChestLid并将X Position设置为-1 ,然后返回0来设置起始位置。 在时间轴窗口中,设置帧555 。 最后,在“检查器”窗口的“变换”字段中,将“ Y Position ChestLid”设置为6 。 再次按轨道上的“ 录制”按钮以结束录制。


因此,我们对胸部的盖子进行动画处理,使其穿过墙壁。

现在,您需要放置Camera4,以便当盖子飞走时它位于胸部上方。 我们将重复与上一个相机相同的步骤,因此我将不详细描述每个动作。

赋予Camera4对象一个位置(X:-9.00,Y:5.4,Z:5.18) 。 将Camera4设置为旋转(X:90,Y:0,Z:0)


与添加的所有其他摄像机一样,添加动画会使场景更有趣,因此您应该在打开胸部后使摄像机放大。

选择时间线窗口。 将GameObject Camera4拖入其中,并创建一个Animation Track 。 将轨道389设置为跟踪。 单击Camera4轨道 ,然后单击“ 录制”按钮。 选择GameObject Camera4 。 在“检查器”窗口的“变换”字段中, 将“ X位置”设置为0,然后再次设置为-9

在“ 时间轴”窗口中,将“动画轨道”拖到第555帧

最后将Camera4的Y位置设置为3.74


现场终于结束了。 点击播放并对其评分!


复杂地管理:分组跟踪


这是由几个“演员”组成的所有事物的简短动画,因此对于我们来说跟踪游戏对象和轨迹非常容易。 但是,当创建具有许多运动部件和演员的更复杂的场景时,将变得很难控制。 这就是为什么订购非常必要的原因。 尽管场景已经准备好了,但让我们花几分钟的时间来组织它-将来您仍然会为此感到感谢。

组织工作的一种方法是对曲目进行分组。 首先,在“时间轴”窗口中的轨道下单击鼠标右键,然后选择“ 轨道组” 。 单击跟踪组,然后在检查器中将其名称更改为Activations


重复此过程,并创建一个名为Animations的跟踪组。 时间轴现在应如下所示:


现在,将所有带有“活动”部分的轨道拖到“激活”组 ,并将其余所有轨道拖到“动画”组 现在,您可以打开和关闭每个组,以方便与他们合作:


不要忘记保存您的工作。坐在导演椅上并称赞自己-您已经完成了第一个时间表。

接下来要去哪里


如果您错过了本教程的某些部分,请不要忘记可以从此处下载工件和完成的项目

我们努力工作,并使用模型动画,更换相机和更新对象的生命周期创建了一个过场动画,但在这里可以学到更多。与时间轴相关的最重要方面之一是创建自己的脚本,您可以在其中将动画与可以执行的代码相关联。在此处了解有关脚本的更多信息。如果您已经习惯了,请在打开百宝箱后尝试向场景中添加脚本。

如果您有兴趣总体上了解有关Unity中动画的更多信息,请查看我们很棒的教程Unity动画简介。

要了解有关创建3D模型和“动画”窗口的更多信息,请查看此处提供的一系列详细的Unity开发人员教程

最后,如果您对创建游戏感兴趣,则可以购买我们的书籍Unity Games By Tutorial它讨论了从头开始创建四种类型的游戏,并详细介绍了该过程的每个阶段。

Source: https://habr.com/ru/post/zh-CN418035/


All Articles