MegaBlock_Basic

演示如何使用Mega的基本功能,通过工具导入Block,摆放3D内容,并最终运行查看跟踪效果。

配置和运行

请参考 样例使用说明 进行配置和运行。

运行效果

../../_images/image_gs1_39.gif

用法

../../_images/image_s1_11.png
标记1:显示诊断信息(最新版本显示略有差异)。
标记2:停止/开始跟踪。跟踪停止后默认内容会消失。

详解

这个sample可以是无代码的,但通常不推荐。脚本中的代码只有一个作用:针对特定的系统状态对终端用户进行提示。

场景是如何创建的?

创建EasyAR Mega场景 这一小结的内容介绍了场景中EasyAR相关功能的创建。

3D模型在哪里?

场景中并未提供3D模型。如果不自己创建或添加模型,运行时将只显示相机画面。你需要根据 样例使用说明 的描述,比照工具导入的Block在需要的地方摆放3D模型。

诊断信息是什么?

运行时你会发现定位信息是不断更新的,这也意味着运行时应用是不断与服务器进行通信的。这是Mega得以运行的基础,一般情况下你不应该关闭这个连接,使用过程中断开与服务器的连接将极大的影响Mega的效果。

在开发中展示并关注诊断信息是极其有帮助的,它将帮你了解系统的基本运行情况,也能在反馈问题的时候与EasyAR团队建立有效沟通。

重要

请仔细阅读 弹出消息处理及错误围栏 以及 会话状态显示及转储 ,仔细斟酌在开发阶段、测试阶段、应用上线之后应该采取何种配置,以及保留何种控制开关。请注意,与EasyAR的沟通通常需要提供这些信息,建议多利用而不是立马关闭。

需要合理处理的正常服务状态

这个sample展示了应该如何获取服务状态变化并合理处理。

获取状态变化信息

megaTracker.LocalizationUpdate += (response) =>
{
    HandleLocalizationStatusChange(response.Status);
};

这个信息是Mega定位服务返回的数据,它并不是每帧更新的,但可以反映服务器的连接情况、定位成功与否等。

处理特定状态变化,提示终端用户

if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
    if (!MsgBox.activeSelf)
    {
        MsgBox.SetActive(true);
    }
    var text = MsgBox.GetComponentInChildren<Text>();
    text.text = "Message for developer:" + Environment.NewLine +
    "QPS limit exceeded, you can keep random user fail (overall worse tracking quality) or pay for more QPS." + Environment.NewLine +
    "QPS超限,你可以保持随机用户失败(总体跟踪质量下降)或付费提升QPS上限。" + Environment.NewLine +
    Environment.NewLine +
    "Message for user:" + Environment.NewLine +
    "Too many users, please wait patiently." + Environment.NewLine +
    "用户过多,请耐心等待。";
}
else if (status == MegaTrackerLocalizationStatus.WakingUp)
{
    if (!MsgBox.activeSelf)
    {
        MsgBox.SetActive(true);
    }
    var text = MsgBox.GetComponentInChildren<Text>();
    text.text = "Message for developer:" + Environment.NewLine +
    "Service is waking up, you need to let user wait." + Environment.NewLine +
    "服务正在唤醒中,你需要让用户等待。" + Environment.NewLine +
    Environment.NewLine +
    "Message for user:" + Environment.NewLine +
    "Service is waking up, please wait patiently." + Environment.NewLine +
    "服务正在唤醒中,请耐心等待。";
}

你需要对QpsLimitExceeded和WakingUp两个状态进行处理,并以合适的方式向终端用户进行提示。sample中的文字是一个参考。

  • QpsLimitExceeded

如果遇到这个状态,通常来说就是访问服务的设备过多。EasyAR Mega服务是按Qps收费的,需要注意这个数值并不是并发,通常来讲如果按默认配置,设备请求是1FPS,这时Qps数值恰巧与设备并发量相当。由于网络访问存在波动,在设备总数接近上限但未达到上限时出现这个状态也非常正常。

如果有设备出现这个状态,该设备的跟踪效果将受到一定影响,如果持续收到该状态,跟踪将完全由设备进行,效果将大打折扣。

如果有设备出现这个状态,访问服务的其它设备也可能会出现同样的状态,具体设备和出现时间是完全随机的,可以不严谨地类比抢票过程。

Qps超限时服务质量是受保证的,但设备上的跟踪效果不受保证,你需要购买更多Qps以支撑应用使用。如果需要短期提高Qps支持(超过50),需要至少提前 两个工作日 与EasyAR商务沟通并报备。

在Qps超限时,建议提醒用户访问人数过多,建议错峰使用等。

  • WakingUp

如果长时间(不同服务有所不同,试用期间时间间隔更短)没有请求服务,在恢复请求后有时会出现这个状态,大部分情况下下一个请求就会正常,通常不会超过数秒。

如果出现这个状态,可以让用户等待短暂时间。

开关MegaBlockTracker

MegaBlockTrackerFrameFilter.enabled 可以控制MegaBlockTracker的开关。关闭之后跟踪就停止了,Block会收到丢失信号。如果这时候强制显示内容,会发现内容贴屏。sample中是通过按钮的事件实现的,

../../_images/image_s1_21.png

MegaBlockTrackerFrameFilter 还有与云服务连接(定位)的开关,如有需要可以根据接口文档说明来使用。一般情况下你不应该关闭定位,使用过程中断开与服务器的连接将极大的影响Mega的效果。