Wwise概述
强大的游戏音频中间件,程序和音频制作流程分离,各司其职,强大的混音,较多的优化手段,内置多语言支持,多平台支持,每个平台独立调整设置。
Wwise优点
如使得Unity跟音效模块完全分离、具有性能调试工具、具有丰富的混音器等。
集成Wwise到项目
首先在Wwise官网下载WwiseLauncher和SDK,需要注册一个账号,用邮箱就可以。
选择Unity这栏,可以看到Unity的项目点击Integrate Wwise into Project
上面是选择Wwise的版本号,集成到Unity的Packages选择。
Copy of Wwise SDK files 这一栏必填,选择下载的Wwise SDK路径。
Wwise Project Path 这一栏可不填,用于集成已有的Wwise项目。
Unity Installation 这一栏必填,选择Unity的安装目录Unity.exe。
点击 Integrate 进行集成安装,最后会在Unity项目的工程目录里生成Wwise相关的文件,生成的_WwiseProject结尾的副本目录需要删除,否则会引起冲突。
Wwise项目工程及调试
创建一个WwiseProject界面如下,以下是Profiler调试工具,可在Layouts切换显示,具体用法见官网文档。
点击如图按钮,通过ip进行连接设备调试,设备需要和电脑在同一局域网上。
连接后可以查看运行时的日志和状态,方便调试查bug。
Unity中使用Wwise(不同版本的Wwise可能会有变动)
Wwise初始化组件(必须)
AkGameObj 用于给WwiseEngine PostEvent 触发事件播放音频,声音源。
AkAudioListener 声音接收器。
SoundBank
Wwise中Event需要提前加载对应的bank,对应.bnk文件。
使用 AkSoundEngine.LoadBank(bankName);加载,AkSoundEngine.UnloadBank(bankName);卸载,或AkBankManager.LoadBank(bankName);加载,AkBankManager.UnloadBank(bankName);卸载。
PostEvent
触发事件播放音频。
AkSoundEngine.PostEvent(eventName, gameObject);
PostEvent回调函数
AkSoundEngine.PostEvent(eventName, gameObject, in_uFlags, in_pfnCallback, in_pCookie);
其中in_uFlags的类型是AkCallbackType
- AK_EndOfEvent: 事件结束时触发的回调。
- AK_EndOfDynamicSequenceItem: 动态序列中的一个项目结束时触发的回调。
- AK_MusicSyncBeat: 音乐同步节拍时触发的回调。
- AK_MusicSyncBar: 音乐同步小节时触发的回调。
- AK_MusicSyncEntry: 音乐同步入口时触发的回调。
- AK_MusicSyncExit: 音乐同步退出时触发的回调。
- AK_MusicSyncGrid: 音乐同步网格时触发的回调。
- AK_MusicSyncUserCue: 音乐同步用户提示时触发的回调。
- AK_MusicSyncPoint: 音乐同步点时触发的回调。
- AK_Marker: 标记点触发的回调。
- AK_Duration: 持续时间触发的回调。
- AK_MusicPlayStarted: 音乐开始播放时触发的回调。
- AK_MusicSyncAll: 所有音乐同步事件触发的回调。
- AK_MusicPlaylistSelect: 音乐播放列表选择时触发的回调。
public void EventCallback(object in_cookie, AkCallbackType in_type, AkCallbackInfo in_info)
{
if (in_type == AkCallbackType.AK_EndOfEvent)
{
//事件结束回调
}
else if (in_type == AkCallbackType.AK_Duration)
{
//获取持续时间
AkDurationCallbackInfo durationInfo = (AkDurationCallbackInfo)in_info;
float duration = durationInfo.fEstimatedDuration;
}
}
RTPC
用于配合Wwise,实现动态控制,如音量,传递某些游戏参数等。
设置RTPCValue:AkSoundEngine.SetRTPCValue(RTPCName, RTPCValue);
获取Wwise中的RTPCValue:AkSoundEngine.GetRTPCValue(string in_pszRtpcName, GameObject in_gameObjectID, uint in_playingID, out float rValue, ref int io_rValueType );
其中io_rValueType是enum AkQueryRTPCValue,不使用RTPCValue_PlayingID类型的话可以忽略in_playingID。
例如想要获取音频的电平值:
int refType = (int)AkQueryRTPCValue.RTPCValue_Default;
float rtpcValue = 0;
//"xxx"的是Wwise里RTPC参数名,WwiseObj是挂AkGameObj的GameObject。
AkSoundEngine.GetRTPCValue("xxx", WwiseObj, 0, out rtpcValue, ref refType);
Wwise落地到项目中需要考虑的方面
- 音频资源的大小以及运行时音频资源的使用情况。
- 内存和cpu的使用以及播放声音数量(设备上使用情况尤为重要)。
- 播放音频是否会造成卡顿现象(可能会造成的原因有音频资源太大、同帧播放音频数 量太多等)。
遇到问题解决方向
- 设备连接Profile调试,查看Capture Log和SoundBanks信息。
- 遇到报错首先查看 Wwise官网帮助文档。
Comments NOTHING