《黎明杀机》是一款制作时间紧迫并定期进行更新的在线游戏。为了避免在缺少提醒的情况下发布在线Wwise SoundBank更新并做到对未来功能的及时支持,我们开发了以下的Wwise工程更新流程。
在我们的开发过程中,每个新的发布周期都有自己的Stream(使用UGS和P4来跟踪),每个新的Stream都有专属版本的处于活跃状态的Wwise工程。
意图
- 将所有未来的研发工作保管在一个不向公众发布的Wwise工程版本(研发专用"临时"Wwise工程)中。
- 在时机成熟时,能够轻松地将任何新的工作从研发专用"临时"Wwise工程转移到主Wwise工程中。
流程
- 在主Wwise工程中规划并创建出每个DLC功能对应的专用Work Unit——如地图、关卡、内容等,在此次的案例中是角色。
- 当需要开始对未来的Stream提供音频和新增集成工作支持时,从主Wwise工程中创建一个"临时"Wwise工程。
- 在这个新的"临时"Wwise工程中,只在与新功能有关的专用Work Unit上进行工作——其他一切都将被冻结。对与主Wwise工程重合的既有部分所做的任何更改,都必须之后在主Wwise工程中手动再做一遍。
- 在当前Stream的发布完成后,将新的研发专用"临时"Wwise工程的Work Unit合并到新版本的主Wwise工程中。
- 为下一个即将到来的Stream重复上述步骤。
为在线开发构建Wwise工程
- 设计一个支持这种方法的Wwise工程结构的关键是需要所有未来的开发必须尽可能地自成一体。例如,在《黎明杀机》中,每个地图、杀手和幸存者都有自己的一系列专用Work Unit。
这包括所有相关Wwise文件夹中的专用Work Unit:Game Parameter、State、Switch、Attenuation、Effect等。可以说,任何支持创建Work Unit的地方都需要这样细分,除了Interactive Music Hierarchy和Master Mixer Hierarchy。
另一件要记住的事是,你要有一个有组织的Originals文件夹,特定功能的声音效果都应在与之对应的Originals子文件夹中。
创建研发专用"临时"Wwise工程
1.当我们准备开始为即将到来的Stream开发新功能时,我们会复制当前的主Wwise工程,这需要我们创建一个新的工程文件夹,在新的Stream名称后面加上_Temp,然后将当前Wwise工程中的所有内容复制到其中,只有少数例外如下图所示。
不要复制.cache、.validationcache、.wsettings或任何.prof文件。
我们也不复制GeneratedSoundbanks文件夹,不过通常它并不存在于我们的工程结构下,因为我们会直接将Soundbank生成到Unreal Stream路径下。
2.给新的Temp Wwise .wproj文件起一个独特的名字
当Wwise工程复制完成后,先不要打开它——给.wproj文件起一个唯一的名字是很重要的——名称要填在文件名中和元数据中。
在新的.wproj工程文件上点击右键,取消 "只读 "的选择。然后用一个基本的文本编辑器打开它,最好是用Notepad++。在Project Name=后填入未来Stream的名称,并在末尾加上_Temp,记得把.wproj文件名本身也改一下。
3. 一定要在打开Wwise工程之前将整个Wwise文件夹添加到版本控制软件中
你之所以要在打开Wwise工程之前将其标记为添加(mark for add),是因为现在你可以将整个新的Temp Wwise工程标记为添加。但一旦你打开Wwise工程,很多额外的文件就会被生成,比如你的个人设置文件,一般来说,人们并不希望把这些文件加入到版本控制中。
注意,你第一次用新的Wwise工程生成SoundBanks时,所有的缓存文件(.cache)都要重新生成,这会花不少时间。
将临时Wwise工程合并到主Stream中去
在当前Stream经历了它的发布周期之后,便是时候安全地将研发专用"临时"Wwise工程的工作合并到主Stream Wwise工程(Main Stream Wwise Session)中去了。这可以手动完成,如下所示:
1.为新Stream创建一个新的主Wwise工程
每个版本都会有一个新的、按字母顺序递增的Stream名称,例如,从Gorilla转到Horse(G-H)。在上面一节创建研发专用"临时"Wwise工程时,我们以即将到来的Stream的名称为它取了名字,并附加了"_Temp"字段。
现在,我们将按照上述创建 "临时工程" 时的相同步骤,再次复制相同的主Stream Wwise工程,并在其最新的NotePad记事本++中重命名新的.wproj文件,并在打开新创建的工程之前将其标记为添加(Mark for Add)。
例子:
主Stream Wwise工程: DeadByDaylight_2019_2_5_Gorilla.wproj
即将到来的Stream的研发专用"临时"Wwise工程: DeadByDaylight_2019_2_5_Horse_Temp.wproj
新的主Stream Wwise工程: DeadByDaylight_2019_2_5_Horse.wproj
2.手动将新的Work Unit从临时工程中移入新的主工程中
如果你的Mixer路由状况在创建临时工程和创建新的主工程之间没有发生剧烈的变化,那么便不需要对其做任何重新连接。
音乐整合不能被移动,需要从临时工程中重新编辑,其实任何静态结构中的自定义路由更改都是如此,例如将新角色的power sfx发送至Master Mixer Hierachy中专门用于该杀手的子辅助总线。
移动Work Unit
1、在新的主Wwise工程中创建新的Work Unit,与研发期间在临时工程中创建的任何新Work Unit的名称和位置相匹配。
2、关闭所有打开的Wwise工程。
3、创建一个新的临时资源管理器文件夹,并将临时Wwise工程中新开发的每个Work Unit复制到其中。如果Work Unit的名称没有明显显示出它在Wwise文件夹结构中的位置,可以把它放在临时资源管理器文件夹中的一个合适的文件夹里,或者一次做一个Work Unit的下面步骤。你不会想把它们混在一起。
4、现在,用新的主Wwise工程中新的空Work Unit的各自ID替换临时Wwise工程的Work UnitID。在资源管理器中右键点击Work Unit,关闭 "只读",然后再次右键点击,在普通文本编辑器(如Notepad++)中打开它。
在这里,你可以看到关于某个Work Unit的大量纯文本信息。请确保你不会意外地替换掉顶部的WwiseDocument ID,你需要的是WorkUnit ID,它在靠下方一点的位置。
5、一旦你把某个临时Work Unit ID替换成与之匹配的空的主Work Unit ID,你就可以把这个临时Work Unit复制并粘贴到新的主Wwise工程的资源管理器文件夹结构中的正确位置。
你会被问到是否要覆盖该Work Unit——说 "是"!
如果你没有被问到这个问题,你应该回到上一步,确保你在新的Wwise工程中用新的ID正确地创建了所有特定的Work Unit。
6、一旦所有新的Work Unit都被复制过来,你也要把相关的原始文件夹复制过来。你不需要改变Originals文件夹的任何ID,但不要忘了把它们添加到Wwise的主工程中。
7、现在你可以打开新的主Wwise工程了。
如果你没有正确地替换一个ID,你可能会得到一个错误,即Work Unit没有已知的父级。不用担心,你只需要手动将它从结构的顶层移回它的正确位置,比如说Actor Mixer。
限制
- 在公共/共享Work Unit中完成的任何工作,如Master Mixer Hierachy的设置、UI等,都必须在主Wwise Stream工程中手动重新完成。
- 这个过程并不适用于Interactive Music Hierachy。
- 在创建了新的主Wwise工程之后,在旧的Wwise工程中支持过去Stream的任何工作都需要在新的主Wwise工程中手动重新完成。
快速和肮脏的版本
由于将一个新的Work Unit移动到一个它不认识的Wwise工程中,只会导致Work Unit在Wwise结构中失去正确的位置,所以如果你只是想将一块随机的逻辑结构从一个Wwise工程移动到另一个,你可以用快速和肮脏的方法复制Work Unit。
在源Wwise工程中,创建一个新的临时Work Unit,复制并粘贴所有你需要的Wwise逻辑,然后,在资源管理器中,将该Work Unit的副本添加到目标工程的正确子文件夹中。然后在新的工程中,你可以找到它,就能把其中的Wwise逻辑移到你想要它们去的地方了。
评论