[我花2个月做了叙事短篇游戏]我是如何实现剧情演出的(上)

作者:陈虹松
前言
这两周陷入秘之困境,没有目标感,知道有很多的问题,但是却没有足够的精力去修复它,感觉东西已经做好了,但是觉得实际上要真正的做完还需要很多时间。
简而言之,心态崩了。
经朋友一起吃饭提醒,感觉像是陷入游戏制作的抑郁期,于是这段时间就放飞自我,完全没有再去思考接下来要怎么样。
但是"债"还是要还的,债,即人的责任。没有完成责任,那就会累计起来债。所以还是提起精力继续写点什么内容产出出来。
另外碎碎念,国内的环境发布游戏不能允许任何地府、鬼(牛头、孟婆……)这类的东西。作为想"弘扬民族文化"的我来说的确是个打击,难道只能存在西方的天使恶魔,地狱和天堂,只能有日本的八百万神明,而不能有我们在自己的传统上的二次创作呢(可能是因为剧本内容发生在现代有关吧,(笑,后面再找个机会优化下这个设定好了)。
回到正题,这一次的内容主要为给大家了解Unity内实现剧情演出是如何完成的,以及我们如何去拓展Timeline它的功能(这个将放在下一章)。
剧情演出
个人认为,有剧情演出的剧情游戏,比单纯的立绘背景加文字的游戏的表达效果高很多。例如《去月球》,虽然画质本身以及场景并不是给人一种视觉冲击的体验,但是就像小说和舞台剧的差异,有了舞台,叙事性和演出效果就会大非常的多。
创建舞台场景
首先是舞台场景的创建。舞台场景本身的创建很简单,只需要把要讲述的故事的资源放进场景就好了。

创建Timeline资源
然后是让场景内的元素能够被控制。大家不知道接触过Unity的动画系统没有,它可以很方面的创建一个剪辑,然后在一个时间轴上去记录动画节点下面所有物体的可控制属性。而Timeline本质是一个线性控制Unity属性的一个“动画”系统。
右键创建资源后,将其资源绑定在场景的Timeline节点上。

Timeline节点肯定是要在所有控制对象的共同父节点上。

然后就是实现控制,这里有些部分我直接引用原先文章里面的内容(因为这么久了,Unity对这块的用法是没有修改的,所以学功能主要是学用法呀)。
动画控制
右键Timeline窗口或者直接将要控制动画的对象拖入Timeline窗口,

我这里以控制Mask上Render的Color为例,实现白屏后显示场景的效果。操作很简单,勾选动画轨道的录制按钮,对控制对象上的属性直接修改,Timeline的动画轨道会记录下该值,再另外的时间帧中记录新的值,关闭录制,完成一段简单的动画。

激活轨道
对目标对象进行GameObject的开关操作,使用ActivationTrack。

在Active的Clip覆盖的时间段内目标对象激活,范围外的地方,目标对象异常。效果如下:

特效控制
TimeLine是用Control Track控制轨道来实现的。

给轨道添加一个Clip来控制资源


Control主要属性意义:
Source Game Object:用做选择场景内的物体,选择的物体将会在TimeLine运行到该Clips时激活。(如果直接用物体激活来做,不能在编辑模式下看到粒子的变化)
Prefab:选择项目的预制体资源,如果选择好预制体后,Source Game Object会修改为Parent Object,代表生成的预制体将会放在哪个场景物体下。

加入的特效可以来回拖动看实际效果

以上,最基础又常用的轨道已经介绍完了,基础的如Audio Track顾名思义,设置音效的播放就不列出来了。下面将主要开始重点讲Signal Track和Playable Track。
信号轨道
这个功能主要像游戏内的事件一样的,Timeline通过该信号功能,将Timeline目前发生的重要步骤广播出去。
以目前游戏中暂停演出功能为例,我需要在文字出现的时候暂停Timeline的演出,等到玩家读取完该段对话后,继续进行Timeline,如果没有信号功能。我只能做很多段的Timeline进行拼接这无疑是一个噩梦。
点击Marker按钮,显示信号发射器,右键点击后添加信号发射器。

目前我这里只创建了一种类型的发射器,即是暂停播放。

值得一说,不同的信号发射器是不同的资源,你只需要创建出来后,命不同的名字就好了。

目前还需要发射出来的信号有功能接受后处理事情。SignalReceiver接受Timeline中发射出来的信号,然后调用具体的事件。

一旦你在场景中有SignalReceiver组件后,你的发射器会自动去匹配接收器当然接收器可以不止一个,可以点击+号继续添加。

我为了方便直接把调用的函数功能放在了TimeLineReceiver中,让SignalReceiver接受到后直接调用。

于是信号发生、接受、处理这三个步骤就全部打通了。当Timeline播放到事件发生的位置点时,触发暂停功能。我在之前的编辑器里面加入了一个节点,检测到暂停事件后触发对话。这样实现了演出+对话+演出的功能。

后续
接下来是功能最强大也是Timeline重中之重的Playable Track轨道,可以支持自定义功能比如我要在演出中穿插对话,以及我要实现时间缩放,实现调用帧动画的功能,等等。
虽然很早之前Timeline刚出的时候就有写过基本的Timeline用法,但是自定义轨道这部分unity的用法优化了很多,因此放在下一节了。
以下是最开始写的文章如果是看Timeline功能扩展的话,也是非常有用的。
【Unity】TimeLine&Cinemachine系列教程——动作特写!
【Unity】TimeLine&Cinemachine系列教程——动态赋值,我要打十个!
另外虽然这里主要用Timeline介绍剧情去了,但是其功能不止这么简单。还是可以制作像:技能编辑器,界面动画管理工具这样的扩展工具。因为编程的思想是相同的,工具的选用主要是了解他能做什么,Excel不也能绘图的么?