弹出消息处理及错误围栏

EasyAR Sense Unity Plugin运行时有时会收到内部组件发现的一些问题,以消息形式出现在系统中。这些消息有些可能是无法继续使用的严重故障,有些可能是故意触发的,有些可能是设备不受支持等等,按严重级别从高到低分为如下几类:

  • Fatal Error

  • Error

  • Warning

  • User Info (由用户代码输入)

由于Unity开发的特殊性,我们默认采取了弹出消息的方式来展示这些信息,以辅助开发。你可以控制这些消息如何展示,配置界面在ARSession上,配置仅作用于当前Session。如果使用老版本插件创建的场景, DiagnosticsController 会在运行时自动以默认值创建。

../_images/image_d2_1.png

除了上述消息之外,还有一类无法控制的警告信息,这类信息会在满足特定配置条件时以 Popup 形式持续展现(主要是Mega开发会遇到),你无法直接关闭。建议关注信息本身,文字上写明了出现的原因和配置方法。作为开发人员,你需要了解不同配置对不同使用方式的要求并根据开发进展合理选择。这类信息是故意展示的,因为在特定使用条件下,这些功能用来辅助内容流程开发,但同时无法获取合理的运行结果,注意不要带着信息上线。

Fatal Response

打包的应用中Fatal Error的处理方式。可以配置的选项如下:

  • DelayedCrash (默认)

    弹出显示10秒钟之后,app主动崩溃(UnityEngine.Diagnostics.Utils.ForceCrash)。

  • ImmediateCrash

    app立即主动崩溃(UnityEngine.Diagnostics.Utils.ForceCrash)。

  • Popup

    在手机上,将以红底白字UI形式显示在屏幕中间。在头戴设备上,将会以巨大的红色板子和白色文字显示在眼前5米处,随后相对物理环境保持位置不动。显示时间为数秒,部分信息会持续显示。

  • Log

    以系统日志输出到手机系统。

Fatal Error是一类特殊的错误,它们无法恢复,出现错误时AR功能也无法继续使用,这些错误一定是由于你的配置错误、启动流程中抛出了异常导致组装中断、或设备不支持导致的。具体有且只有这样几种情况:

  1. License未正确配置或校验失败

  2. 部分设备(包括AR Foundation、AREngine、各种头显等所有使用自定义相机的设备)上使用个人版License超过100s

  3. 部分设备(包括AR Foundation、AREngine、各种头显等所有使用自定义相机的设备)上使用试用Mega云服务超过100s

  4. 设备不受支持或支持设备的Frame Source没有正确配置在ARSession中(同时会引起Fail to Assemble)

  5. 在ARSession中指定了Frame Source但设备不支持该Frame Source

  6. 其它各种情况导致的Fail to Assemble,比如一些数据异常引起的空引用,或部分组装时段接口或回调到用户代码抛出异常等。

  7. 由于相关云服务配置信息错误导致创建云服务功能出错,或配置信息未填写(包括Mega服务、云识别服务、SpatialMap服务)

  8. MegaTrackerFrameFilter特定无法正常使用的配置组合

  9. OutputFrame有运动数据但Frame Source没有定义Origin(正常不会出现)

通常来说,配置错误以及启动流程中抛出了异常导致组装中断题都应该在开发过程中避免。设备不支持的情况主要出现在需要运动跟踪能力的功能上,你需要参考 运动跟踪与EasyAR功能 了解哪些功能需要注意设备支持,并在开发阶段选择合适的设备进行调试。

通常建议在发布时将选项改成 LogPopup ,但 Popup 对终端用户是不友好的,最佳实践是在运行前检查可用性并对不支持的设备进行合理提示,可以参考 MotionTracking_Fusion 进行检查,注意场景中的配置可能存在变化。

Fatal Response Editor

Unity编辑器中Fatal Error的处理方式。可以配置的选项如下:

  • DelayedCrash

    弹出显示10秒钟之后,Unity编辑器主动崩溃(UnityEngine.Diagnostics.Utils.ForceCrash)。崩溃前会弹出确认窗口。

  • ImmediateCrash

    Unity编辑器立即主动崩溃(UnityEngine.Diagnostics.Utils.ForceCrash)。崩溃前会弹出确认窗口。

  • Popup (默认)

    以红底白字UI形式显示在屏幕中间。显示时间为数秒,部分信息会持续显示。

  • Log

    以系统日志输出到手机系统。

该选项只作用于编辑器,不影响应用发布后的行为。

Error Response

Error的处理方式。可以配置的选项如下:

  • Popup (默认)

    在手机上,将通过红色文字以UI形式显示在屏幕中间。在头戴设备上,将会以红色文字显示在眼前5米处,随后相对物理环境保持位置不动。显示时间为数秒。

  • Log

    以系统日志输出到手机系统。

通常建议在发布时将选项改成 LogPopup ,但 Popup 对终端用户是不友好的。

Warning Response

Warning的处理方式。可以配置的选项如下:

  • Popup (默认)

    在手机上,将通过黄色文字以UI形式显示在屏幕中间。在头戴设备上,将会以黄色文字显示在眼前5米处,随后相对物理环境保持位置不动。显示时间为数秒。

  • Log

    以系统日志输出到手机系统。

通常建议在发布时将选项改成 LogPopup ,但 Popup 对终端用户是不友好的。

User Info Response

User Info的处理方式。可以配置的选项如下:

  • Popup (默认)

    在手机上,将通过白色文字以UI形式显示在屏幕中间。在头戴设备上,将会以白色文字显示在眼前5米处,随后相对物理环境保持位置不动。显示时间根据参数而定。

  • Log

    以系统日志输出到手机系统。

可以通过 DiagnosticsController.EnqueueMessage 向插件输入这些信息。通常只有在配置为 Popup 的时候才真正有用,因为User Info是你自己代码里写的(或运行sample时sample代码写的),你需要自己判断是否使用这种方法进行信息展示,如果配置为 Log ,这将和直接使用Debug.Log输出是一样的。