Unity-Wwise-Oculus踩坑笔记

记录下Unity集成Wwise和Oculus过程中的碰到的一些问题

官方Oculus Spatializer for Wwise 接入文档

目录

    • Wwise导入OSP
    • Unity中的Wwise插件导入OSP
    • Unity接入OSP
    • 打包配置
    • 2022-1-22更新,Unknown game object ID问题


Wwise导入OSP

Wwise安装目录下需要导入对应版本的dll文件(下载地址 Oculus Spatializer Wwise)在这里插入图片描述
导入dll之后重启Wwise,混音器选项中才会有OSP
在这里插入图片描述


Unity中的Wwise插件导入OSP

在Assets/Wwise目录中,导入对应的发布平台的库文件(这一步跟着官方文档走就好了,注意Oculus是Android平台)
需要注意的是库文件存放路径,官方文档写的是拷贝到Wwise/Deployment下
Unity-Wwise-Oculus踩坑笔记_第1张图片
新版本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问题

场景:

  1. 播放音效时,先注册GameObject AkSoundEngine.RegisterGameObj(go);
  2. 音效播放完毕后,回收GameObject并设置坐标 go.transform.localPosition = Vector3.zero;
  3. 反注册GameObject AkSoundEngine.UnregisterGameObj(go);

按上面的流程,会出现Unknown GameObject ID报错,这是由于GameObject反注册后试图修改它的位置。
Wwise会延迟同步Unity中GameObject的位置,这里需要延后反注册的时机。

分析:
通过 Wwise Profiler -> Capture Log 可以发现,设置localPosition后再UnregisterGameObj,实际执行顺序是先Unregister再SetPosition。
Unity-Wwise-Oculus踩坑笔记_第2张图片
延迟一帧调用Unregister,会发现同一帧内,先执行SetPosition,再执行Unregister,这达到预期效果。
Unity-Wwise-Oculus踩坑笔记_第3张图片
再延迟两帧调用Unregister,会发现SetPosition和Unregister依次在不同帧执行
Unity-Wwise-Oculus踩坑笔记_第4张图片
官方提供的处理思路 Unknown/Dead game object ID used in [FunctionName]


✍如果有不正确的地方,还望指正

你可能感兴趣的:(Unity,VR,unity,vr,游戏引擎)