EN

# 六、开发者常见问题

# 6.1 XR Rig的使用注意

  1. 如果游戏中有多个场景,每个场景都放置XR Rig,那么每次切换到新场景,都会自动重置position和rotation,TrackingOriginMode也会重新计算。
  2. 如果想要整个App只有一个XR Rig,可以制作一个启动场景放入XRRig,或者单例,然后调用GameObject.DontDestroyOnLoad让XR Rig保持不销毁。其他场景不放置XR Rig,这种情况在切换场景的时候可以保证position和rotation不被重置,TrackingOriginMode也不会重新计算。
  3. 如果不销毁XR Rig,需要同时保证XR Interaction Manager,QiyuManager同时不被销毁。
  4. 在使用单XR Rig的时候,如果跳转到其他场景中射线无法交互,则需要通过代码设置Canvas上的Event Camera,另外进入新的场景后需要重新初始化XRRayInteractor(可能是Unity的bug),这里我们只需要做一下隐藏和显示就可以了。具体示例如下,将该脚本挂载到UI Canvas上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;

public class QiyuCanvasController : MonoBehaviour
{
    Canvas canvas;
    private void Awake()
    {
        canvas = GetComponent<Canvas>();
        canvas.renderMode = RenderMode.WorldSpace;
        canvas.worldCamera = Camera.main;
    }
    // Start is called before the first frame update
    IEnumerator Start()
    {
        XRRayInteractor[] xRRayInteractor = FindObjectsOfType<XRRayInteractor>();
        foreach (XRRayInteractor xrRay in xRRayInteractor)
        {
            xrRay.gameObject.SetActive(false);
            yield return new  WaitForEndOfFrame();
            xrRay.gameObject.SetActive(true);
        }
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

# 6.2 老版本迁移

# 6.2.1 从v1.0以前的版本升级至新版本

  1. 奇遇Unity SDK v0.4版本及以前版本迁移到UnityXR SDK v1.0.0版本时,必须删除老的奇遇SDK所有文件(QYVRSDK、QIVR Sample、场景中引用的prefab),再通过Unity Package Manager导入新的XR插件。

  2. 1.0版本统一规范了XR接口名称,在删除掉老版本SDK、导入XR sdk后,如果出现unity Editor Log报错,需要根据本开发文档和UnityXR开发文档,替换相应的接口名称。

  3. 挂在原“QVR Camera”预制体及其子物体上的脚本、组件,请根据需要移至“XR Rig (opens new window)”预制体上。

# 6.2.2 从v1.0及以后的版本升级至新版本

解压sdk的zip包,通过PackageManager->Add package from disk... 菜单按钮直接导入新的package.json即可。

# 6.2.3 安全围栏接口(从v1.0~v1.2.1升级至新版本)

原QiyuBoundary里的实例方法修改为静态方法

  • v1.2.1及以前的版本:
QiyuBoundary boundary = new QiyuBoundary();
boundary.GetConfigured()
boundary.SetVisible(true)
boundary.GetVisible()
boundary.TestNode(QiyuBoundary.Node.HandRight)
boundary.TestPoint(Vector3 point)
boundary.GetGeometry()
boundary.GetDimensions()

QiyuPlugin.GetFloorLevel()
  • v1.3.0及以后的版本:
QiyuBoundary.GetConfigured()
QiyuBoundary.SetVisible(true)
QiyuBoundary.GetVisible()
QiyuBoundary.TestNode(QiyuBoundary.Node.HandRight)
QiyuBoundary.TestPoint(Vector3 point)
QiyuBoundary.GetGeometry()
QiyuBoundary.GetDimensions()

QiyuXRCore.GetFloorLevel()

# 6.3 多语言AppName配置

如果需要不同系统语言下显示不同AppName,需要在打包的时候导入Android的多语言配置文件,在每个语言string.xml里配置不同app_name字段,多语言package例子可以从这里下载:

Multi Language Configuration (opens new window)

# 6.4 Newtonsoft JSON冲突

在SDK 1.0.0中,Unity2020以上的版本PackageManager内置了Newtonsoft插件,会与SDK中的Newtonsoft发生冲突,SDK1.0.2中已经修复了这个问题,如果项目中有如下报错:

图6.4.1 Newtonsoft冲突报错

可以将sdk目录下的JsonDotNet目录删除,如下

图6.4.2 删除JsonDotNet文件夹

# 6.5 APP 上传至开发者平台

奇遇开发者平台对应用包名、签名、正式版、应用版本号、奇遇SDK版本号、Android SDK版本号等关键信息进行查验。开发者在上传APK之前,必须保证各项信息满足平台要求。

  • 包名:当前上传的包名不能与其它开发者和自己应用重复,如果检测到被占用,会给予提示
  • 签名:使用正式版签名,非首次上传的应用,签名必须与首次上传且审核通过的签名一致。配置应用签名参见:https://docs.unity3d.com/2020.3/Documentation/Manual/class-PlayerSettingsAndroid.html#Publishing
  • 正式版:取消勾选“Development Build”
  • 应用版本号:非首次上传的应用,版本包必须高于历史就近版本
  • 奇遇SDK版本号:确保使用的奇遇SDK版本号不低于1.0.0
  • Android SDK版本号:确保Android SDK版本号不低于26

# 6.6 应用上线审查标准

奇遇应用审核指南 (ARG) (opens new window)

# 6.7 鉴权功能

OS 版本v5.0.10 及以上,加入了鉴权功能,对于已经上架到奇遇商店的游戏,需要打release包并运行在奇遇3设备上进行测试,必须将Project Settings ->Player -> Bundle Version Code 设置高于商店中应用的版本。

图6.7 Bundle Version Code

# 6.8 常用音频插件

对于Unity开发者常用的音频插件,有些适配奇遇设备时,由于个别配置项默认值不兼容,导致系统录屏功能声音异常。下面列出了在奇遇设备上使用Fmod、Wwise插件时需要修改的配置项。

# 6.8.1 FMOD 插件

如果您用的是Fmod 插件来制作应用音频,请在Fmod Setting中将Output Mode设置成 ‘Java Audio Track’, 否则会出现录屏没有声音的问题。

图6.8.1 Fmod Output Mode

# 6.8.2 Wwise 插件

如果您用的是Wwise插件来制作应用音频,请在Wwise Initialization中,将所有Audio API 设置成 ‘Open SL_ES’, 否则会出现录屏没有声音的问题。

图6.8.2 Wwise Audio API

# 6.8.3 Photon 在线语音通信

如果您用的是Photon插件来制作应用音频,并且在语音交流过程中出现BGM与人声比例差异较大,例如BGM声音过大人声较小或BGM声音过小人声过大,请在 Audio Source 中通过配置本地播放端和接收远端Voice的Audio data mix,通过设置各自的增益比重来调整BGM或人声的大小,Photon音频插件原理见图 6.8.3.1,Audio Source配置见 6.8.3.2 。

图 6.8.3.1 Photon音频插件实现原理
图 6.8.3.2 Audio Source配置

# 6.9 多个校准 UI叠加

从奇遇SDKv1.2.0开始,校准功能统一由系统管控,开发者无需在工程里必须添 “QiyuManager” 或 “QiyuRecenter” 实现校准功能了。

图6.9.1 多个校准UI叠加

如果您在工程里修改过奇遇SDK提供的“QiyuManager”预制体,升级SDK到 1.2.0及以上版本后,长按手柄Home键校准,出现了多个校准 UI叠加的现象,请检查场景中,是否存在“QiyuRecenter”预制体,如果有,请删除。

图6.9.2 删除QiyuRecenter

如果您的工程运行,Recenter UI显示正常,请忽略此条。

# 7.10 URP工程已知问题

  1. URP工程,使用Vulkan,会出现低概率黑屏问题。
  2. URP工程,设置eyeTextureResolutionScale=1.0会失效,请设置非1值。
  3. 如果是URP项目,默认HDR是开启状态,如果使用Underlay,需要手动关闭。
  4. Unity2020和2021上,FFR调节失效