记录下Unity集成Wwise和Oculus过程中的碰到的一些问题
官方Oculus Spatializer for Wwise 接入文档
Wwise导入OSP
Wwise安装目录下需要导入对应版本的dll文件(下载地址 👉Oculus Spatializer Wwise)
导入dll之后重启Wwise,混音器选项中才会有OSP
Unity中的Wwise插件导入OSP
在Assets/Wwise目录中,导入对应的发布平台的库文件(这一步跟着官方文档走就好了,注意Oculus是Android平台)
需要注意的是库文件存放路径,官方文档写的是拷贝到Wwise/Deployment下
新版本Wwise应该是修改了库文件的加载路径,这里看Unity中打印可以知道这里路径配置不对的话,可能会报 Could not find plug-in dynamic library
的错误
Unity接入OSP
3.Unity接入OSP(下载地址 👉Oculus Spatializer Unity)
下载官方提供的package包导入,在Project Settings / Audio中取消勾选Disable Unity Audio,并将Spatializer Plugin设置为OculusSpatializer
在集成Wwise的时候,会自动勾选Disable Unity Audio,一般情况下(只有Unity+Wwise),禁用Unity的音效系统是无可厚非的,但如果需要对接Oculus,则需要取消勾选,并设置Spatializer Plugin为OSP,否则会导致打出来的包在Oculus上运行没有声音。
打包配置
Project Settings - Wwise Editor - Asset Management,勾选Copy SoundBanks at pre-Build step。
打包的时候,会自动把对应平台的音效包导入到StreamingAssets中打包。
2022-1-22更新,Unknown game object ID问题
场景:
- 播放音效时,先注册GameObject
AkSoundEngine.RegisterGameObj(go);
- 音效播放完毕后,回收GameObject并设置坐标
go.transform.localPosition = Vector3.zero;
- 反注册GameObject
AkSoundEngine.UnregisterGameObj(go);
按上面的流程,会出现Unknown GameObject ID报错,这是由于GameObject反注册后试图修改它的位置。
Wwise会延迟同步Unity中GameObject的位置,这里需要延后反注册的时机。
分析:
通过 Wwise Profiler -> Capture Log 可以发现,设置localPosition后再UnregisterGameObj,实际执行顺序是先Unregister再SetPosition。
延迟一帧调用Unregister,会发现同一帧内,先执行SetPosition,再执行Unregister,这达到预期效果。
再延迟两帧调用Unregister,会发现SetPosition和Unregister依次在不同帧执行
官方提供的处理思路 👉 Unknown/Dead game object ID used in [FunctionName]
✍如果有不正确的地方,还望指正