(接上)说到FlipFlop,《My Show》的“音乐玩法”中对其还有大量的应用(太好用了):
游戏里可以通过点击1-9按钮或按电脑键盘中的1-9数字键控制不同的乐器分轨,每一次按下按钮/键盘将会轮流进行播放/停止该分轨的行为。
键盘中数字键1-9蓝图如下(屏幕上虚拟数字键同理):
我用FlipFlop做翻转函数,按序轮流进行。
A:播放该分轨、将白色按钮旋转45°并将对应卡通人物可见度设为1(出现);
B:结束该分轨、将白色按钮旋转-45°(还原)并将对应卡通人物可见度设为0(消失);
相应的Wwise事件(以8为例,其他同理):
音乐中的分轨受RTPC控制音量,X轴0为静音,1为正常音量。
(Wwise201的音乐很棒,欢迎大家去官网下载Wwise201相关的教程和音频资源)
On Pressed / On Release:按下/释放按钮
在《My Show》的乐器演奏中,我通过按键的时长来控制音符时长,模拟真实乐器长按和短按的演奏实况:
我将所有乐器的乐音收集得较长,比如钢琴上的每个音都保留着手指长按在琴键上直至完全没有声响为止。接着为每个键位做一一对应的Stop Event放在Release动作上,fade out时长设成0.2秒,模拟手指离开琴键时乐音自然终止。这里不能做Stop All之类的Action,比如在按着B键的同时释放了A键,那B键的乐音也被中止了。
而吉他的Release动作除了加上Stop Event外,同时还播放乐音相应的“护弦杂音”,由于所有乐器共用一套键位系统(对应乐音+Switch切换),切换到吉他页面时会分配一个State On去将吉他特有的“护弦杂音”播出来,不会影响其他乐器的Release(其他乐器为State Off)。
效果如下:
国内观赏视频通道
每个键位(A-Z)的通用Release动作如下图:
“护弦杂音”的ActorMixer中,State参数如下图:
游戏中选择“吉他”时触发的事件如下图:
游戏中选择其他乐器时触发的事件如下图:
以后加入更多乐器后,将会按需添加更多State去控制一些特殊奏法Press/Release的相关杂音或效果。
以上是游戏中用过的音频功能相关的蓝图,还有用到一些与非音频相关的节点,下面简单罗列几个,有兴趣了解更多详情的欢迎找我一起讨论:
Play Animation(播放界面动画)
Remove from Parent(从父级中清除目标)
Create a Widget+Add to Viewport(创建界面并显示在屏幕)
Delay(延迟)
Lerp(算法:线性差值)
Set Visibility(设置可见性)
音频功能的实现
设置面板
进入设置面板后,所有音乐将经过LowPass Filter,营造远离舞台现场时的听感,按返回键时恢复。
乐音复用系统
以钢琴示例:在得到强和弱两版C2-C5的“自然音”后,“变化音”均采用自然音“Pitch±100”(调高或调低100音分)来实现;
“和弦模式”则结合Blend Container(混合容器)与“Pitch±100”将单音组合成和弦,有效节省包体大小,提高后续工程可控性。
PS:《My Show》中,Pitch调整的最大幅度目前是100音分(半音),不会影响整体音质表现,但高低八度没有采用pitch±1200来实现,因为会严重影响音质、时长和整体表现。接下来我的优化方案是更充分利用复用系统,比如每个八度只收集3-5个乐音后再按需调整pitch。
多语言切换
设置本地化也算是UE4一个优势,无论是中/英文字 还是中/英语音,都在官方集成封装好了,直接用就可以,很方便。
背景音乐“避让”
运行游戏后开始循环播放BGM,当我们进入一些特定窗口时BGM转为在后台静音播放(比如开始乐器弹奏或音乐玩法),每一个返回键(设置界面除外)都将BGM音量还原至正常,形成一个常规的“避让”系统,避免了音乐的频繁从头播放,减弱重复感。
结语
以上是我用UE4蓝图开发小游戏的设计思路与经验分享。所谓的“零代码”也算是一种代码,蓝图是一个将代码可视化的系统,确实对非程序员很友好。目前市场上还有GameSalad、GameBuilder、GameMei等宣传为“0代码低门槛开发游戏”的工具和平台,但做出来的游戏功能有很大的局限性。开发独立游戏时最好还是具有一定的编程基础,可尝试不同的开发引擎,然后做出适合自己和项目的选择。
在制作游戏的过程中,我觉得开发小游戏比玩游戏还开心,从中学习到了很多,也希望能给同样在摸索UE4引擎的小伙伴们一点微薄的帮助。后续我将会再发表更多关于UE4与Wwise结合的经验分享,谢谢~
评论