HoloLens开发手记 - Unity之Tracking loss
当HoloLens设备不能识别到自己在世界中的位置时,应用就会发生tracking loss。默认情况下,Unity会暂停Update更新循环并显示一张闪屏图片给用户。当设备重新能追踪到位置时,闪屏图片会消失,并且Update循环还会继续。
此外,用户也可以手动处理这个切换过程。发生tracking loss期间,如果不做任何处理动作,那么所有的场景中的全息内容将会处于body-locked状态。
默认处理方式 Default Handling
默认情况下,发生tracking loss期间应用所有的更新动作、事件和消息都会被暂停。同时会应用会显示一张图片给用户。可以用通过项目设置Player settings-> Splash Image->Holographic Tracking Loss image选项来设置tracking loss要显示的图片。
手动处理 Manual Handling
为了手动处理tracking loss, 你需要在上面提到的设置选项上取消勾选“Display tracking loss image”选项。之后就需要使用下面特定的API来处理追踪状态变化。
命名空间: UnityEngine.VR.WSA
类型: WorldManager
- World Manager提供了一个事件(WorldManager.OnPositionalLocatorStateChanged)来让我们识别追踪状态(追踪丢失/追踪可获取到),同时还提供了一个属性来查询当前追踪状态(WorldManager.state)
- 当追踪状态丢失时,场景中相机将立刻静止,不会再移动,即使用户在运动。这意味全息图形将不再响应用户的物理位置的变化,所有内容都会相对用户身体静止
在手动处理追踪状态变化时,你需要每一帧都查询当前追踪状态,或者处理OnPositionalLocatorStateChanged事件。
轮询 Polling
追踪状态最重要的一个状态是PositionalLocatorState.Active,这意味着当前HoloLens的状态追踪正常工作。任何其他的状态都会导致摄像机只剩下旋转增量,而忽略位置变化。
例如:
void Update()
{
switch (UnityEngine.VR.WSA.WorldManager.state)
{
case PositionalLocatorState.Active:
//处理激活状态内容
break;
case PositionalLocatorState.Activating:
case PositionalLocatorState.Inhibited:
case PositionalLocatorState.OrientationOnly:
case PositionalLocatorState.Unavailable:
default:
// 摄像机当前只有旋转增量变化
break;
}
}
处理追踪状态变化事件 Handling the OnPositionalLocatorStateChanged event
此外更便利的方法是订阅状态追踪的OnPositionalLocatorStateChanged事件来处理:
void Start()
{
UnityEngine.VR.WSA.WorldManager.OnPositionalLocatorStateChanged += WorldManager_OnPositionalLocatorStateChanged;
} private void WorldManager_OnPositionalLocatorStateChanged(PositionalLocatorState oldState, PositionalLocatorState newState)
{
if (newState == PositionalLocatorState.Active)
{
// 处理即将进入追踪恢复时场景内容
}
else
{
// 处理即将进入状态丢失时场景内容
}
}
HoloLens开发手记 - Unity之Tracking loss的更多相关文章
- HoloLens开发手记 - Unity development overview 使用Unity开发概述
Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必 ...
- HoloLens开发手记 - Unity之Recommended settings 推荐设置
Unity提供了大量的设置选项来满足全平台的配置,对于HoloLens,Unity可以通过切换一些特定的设置来启用HoloLens特定的行为. Holographic splash screen 闪屏 ...
- HoloLens开发手记 - Unity之摄像头篇
当你穿戴好HoloLens后,你就会处在全息应用世界的中心.当你的项目开启了"Virtual Reality Support"选项并选中了"Windows Hologra ...
- HoloLens开发手记 - Unity之Spatial mapping 空间映射
本文主要讨论如何在Unity项目中集成空间映射功能.Unity内置了对空间映射功能的支持,通过以下两种方式提供给开发者: HoloToolkit项目中你可以找到空间映射组件,这可以让你便捷快速地开始使 ...
- HoloLens开发手记 - Unity之Gaze凝视射线
凝视是HoloLens首要输入方式,形式功能类似于桌面系统的光标,用于选择操作全息对象.然而在Unity中并没有明确的Gaze API或者组件. 实现Gaze Implementing Gaze 概念 ...
- HoloLens开发手记 - Unity之语音输入
对于HoloLens,语音输入是三大基本输入方式之一,广泛地运用在各种交互中.HoloLens上语音输入有三种形式,分别是: 语音命令 Voice Command 听写 Diction 语法识别 Gr ...
- HoloLens开发手记 - Unity之Persistence 场景保持
Persistence 场景保持是HoloLens全息体验的一个关键特性,当用户离开原场景中时,原场景中全息对象会保持在特定位置,当用户回到原场景时,能够准确还原原场景的全息内容.WorldAncho ...
- HoloLens开发手记 - Unity之Spatial Sounds 空间声音
本文主要讲述如何在项目中使用空间声音特性.我们主要讲述必须的插件组件和Unity声音组件和属性的设置来确保空间声音的实现. Enabling Spatial Sound in Unity 在Unity ...
- HoloLens开发手记 - Unity之场景共享 Shared holographic experiences in Unity
佩戴HoloLens的多个用户可以使用场景共享特性来获取集合视野,并可以与固定在空间中某个位置的同一全息对象进行交互操作.这一切是通过空间锚共享(Anchor Sharing)来实现的. 为了使用共享 ...
随机推荐
- Mongodb Manual阅读笔记:CH4 管理
4 管理 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...
- Java Security:keytool工具使用说明
Keytool用法说明 Keytool是一个key与cert的管理工具.使用keytool可以管理public key.private key,以及与key之相关的certificate. 1.com ...
- CSS之旅——第二站 如何更深入的理解各种选择器
上篇我们说了为什么要使用css,这篇我们就从选择器说起,大家都知道浏览器会把远端过来的html解析成dom模型,有了dom模型,html就变成 了xml格式,否则的话就是一堆“杂乱无章”的string ...
- js中的遍历foreach,$.each(),$().each()
<!DOCTYPE html> <html> <head> <meta charset='UTF-8'> <title></title ...
- [转]Oracle 分组聚合二种写法,listagg和wmsys.wm_concat
本文转自:http://www.cnblogs.com/ycdx2001/p/3502495.html with temp as( select 'China' nation ,'Guangzhou' ...
- dedecms调用标签总结(一)
dedecms 基本包含了一个常规网站需要的一切功能,拥有完善的中文学习资料,很容易上手,学习成本较低.学会dedecms 的模板修改.栏目新增.内容模型新增和常用的标签调用方法后,即便我们不懂 ph ...
- POJ 2653 Pick-up sticks【线段相交】
题意:n根木棍随意摆放在一个平面上,问放在最上面的木棍是哪些. 思路:线段相交,因为题目说最多有1000根在最上面.所以从后往前处理,直到木棍没了或者最上面的木棍的总数大于1000. #include ...
- POJ1426Find The Multiple[BFS]
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 27433 Accepted: 114 ...
- jmeter的压力测试
Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试. 以下为压力测试的简单介绍 1.在测试计划下增加一个线程组 2.线程组的内容需要进行编辑,根据压力测 ...
- ActiveMQ初体验
首先介绍下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送. 下面介绍主题,就是今天为大家介绍的ActiveMQ ...