World Anchor空间锚提供了一种能够将物体保留在特定位置和旋转状态上的方法。这保证了全息对象的稳定性,同时提供了后续在真实世界中保持全息对象位置的能力。简单地说,你可以为全息物体来添加空间锚点,这样就能在后续步骤中将全息物体准确恢复到它原来的位置。

Adding a World Anchor 添加空间锚


命名空间: UnityEngine.VR.WSA

类型: WorldAnchor

Unity中添加空间锚的方式很简单,如下:

WorldAnchor anchor = gameObject.AddComponent<WorldAnchor>();

Removing a World Anchor 移除空间锚


如果你不再想将GameObject固定在特定位置,同时在场景中也不想移动它,,那么可以调用Destroy()方法来销毁WorldAnchor组件,如下:

Destroy(gameObject.GetComponent<WorldAnchor>());

如果你想要立刻在场景中移动对象,那么需要调用DestroyImmediate()来销毁空间锚组件,如下:

DestroyImmediate(gameObject.GetComponent<WorldAnchor>());

Moving a World Anchored GameObject 移动锚定的全息对象


当全息对象已附加空间锚组件后,它不能被移动。如果你需要一定全息对象的话,那么你必须这样做:

  1. 立刻销毁空间锚组件
  2. 移动全息对象
  3. 添加一个新的空间锚到全息对象上
DestroyImmediate(gameObject.GetComponent<WorldAnchor>());
gameObject.transform.position = new Vector3(, , );
WorldAnchor anchor = gameObject.AddComponent<WorldAnchor>();

Handling Locatability Changes 处理可定位能力的变化


在某个时间点,空间锚可能不能够在世界中被定位到。如果这种情况发生,Unity将不能更新锚定对象的位置。在应用运行时,这也肯能会发生变化。不能够及时处理可定位能力的变化,可能会导致对象不会出现在准确的位置上。

为了追踪可定位能力的变化,需要采取如下做法:

  1. 订阅OnTrackingChanged事件
  2. 处理此事件

订阅事件

代码如下:

anchor.OnTrackingChanged += Anchor_OnTrackingChanged;

处理OnTrackingChanged事件

代码如下:

private void Anchor_OnTrackingChanged(WorldAnchor self, bool located)
{
// 根据定位状态简单的显示或者隐藏对象
self.gameObject.SetActiveRecursively(located);
}

设定明确的初始状态

有时空间锚能够立刻被定位到。这时候,给对象添加空间锚后,空间锚组件的isLocated属性值将会被设为true,这是OnTrackingChanged事件将不会被触发。因此,在添加空间锚组件后,推荐立刻使用初始的isLocated状态去调用OnTrackingChanged事件,如下:

Anchor_OnTrackingChanged(anchor, anchor.isLocated);

HoloLens开发手记 - Unity之World Anchor空间锚的更多相关文章

  1. HoloLens开发手记 - Unity之Spatial mapping 空间映射

    本文主要讨论如何在Unity项目中集成空间映射功能.Unity内置了对空间映射功能的支持,通过以下两种方式提供给开发者: HoloToolkit项目中你可以找到空间映射组件,这可以让你便捷快速地开始使 ...

  2. HoloLens开发手记 - Unity之Spatial Sounds 空间声音

    本文主要讲述如何在项目中使用空间声音特性.我们主要讲述必须的插件组件和Unity声音组件和属性的设置来确保空间声音的实现. Enabling Spatial Sound in Unity 在Unity ...

  3. HoloLens开发手记 - Unity development overview 使用Unity开发概述

    Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必 ...

  4. HoloLens开发手记 - Unity之Persistence 场景保持

    Persistence 场景保持是HoloLens全息体验的一个关键特性,当用户离开原场景中时,原场景中全息对象会保持在特定位置,当用户回到原场景时,能够准确还原原场景的全息内容.WorldAncho ...

  5. HoloLens开发手记 - Unity之场景共享 Shared holographic experiences in Unity

    佩戴HoloLens的多个用户可以使用场景共享特性来获取集合视野,并可以与固定在空间中某个位置的同一全息对象进行交互操作.这一切是通过空间锚共享(Anchor Sharing)来实现的. 为了使用共享 ...

  6. HoloLens开发手记 - Unity之摄像头篇

    当你穿戴好HoloLens后,你就会处在全息应用世界的中心.当你的项目开启了"Virtual Reality Support"选项并选中了"Windows Hologra ...

  7. HoloLens开发手记 - Unity之Recommended settings 推荐设置

    Unity提供了大量的设置选项来满足全平台的配置,对于HoloLens,Unity可以通过切换一些特定的设置来启用HoloLens特定的行为. Holographic splash screen 闪屏 ...

  8. HoloLens开发手记 - Unity之Tracking loss

    当HoloLens设备不能识别到自己在世界中的位置时,应用就会发生tracking loss.默认情况下,Unity会暂停Update更新循环并显示一张闪屏图片给用户.当设备重新能追踪到位置时,闪屏图 ...

  9. HoloLens开发手记 - Unity之Gaze凝视射线

    凝视是HoloLens首要输入方式,形式功能类似于桌面系统的光标,用于选择操作全息对象.然而在Unity中并没有明确的Gaze API或者组件. 实现Gaze Implementing Gaze 概念 ...

随机推荐

  1. TCP面向连接网络编程

    一 TCP&UDP协议 TCP,Tranfer Control Protocol,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对 ...

  2. 【Android】 Android实现录音、播音、录制视频功能

    智能手机操作系统IOS与Android平分天下(PS:WP与其他的直接无视了),而Android的免费招来了一大堆厂商分分向Android示好,故Android可能会有“较好”的前景. Android ...

  3. C/S架构程序多种类服务器之间实现单点登录(转)

    (一) 在项目开发的过程中,经常会出现这样的情况:我们的产品包括很多,以QQ举例,如登陆.好友下载.群下载.网络硬盘.QQ游戏.QQ音乐等,总不能要求用户每次输入用户名.密码吧,为解决这个问题,高手提 ...

  4. Linux Shell 02 流程控制语句

    一.if语句格式:支持if/elif/else形式,支持嵌套 1. command执行成功(及退出状态为0)时,执行command2 2. 当判断条件为test命令时,判断结果为true时,执行com ...

  5. mysql中count(),group by使用

    count()统计表中或数组中记录 count(*)返回检索行的数目,且不论其值中是否包含NULL count(column_name)返回的是对列中column_name不为NULL的行的统计 例如 ...

  6. NOIP2008提高组火柴棒等式(模拟)——yhx

    题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...

  7. selenium如何分别启动IE、firefox、chrome浏览器

    1.火狐浏览器 /* * 初始化火狐浏览器 * */ public static WebDriver initFireFox(WebDriver dr) { String key = "we ...

  8. codeforces 713C C. Sonya and Problem Wihtout a Legend(dp)

    题目链接: C. Sonya and Problem Wihtout a Legend time limit per test 5 seconds memory limit per test 256 ...

  9. UVALive 6168 Fat Ninjas --二分小数+搜索

    题意:一个NxN的网格地板,有一些激光束从天花板垂直射向地面的某个网格,一个圆要安全地从左走到右,不碰到上边界,下边界以及激光束,问这个圆的直径最大能达到多大. 分析:可以二分直径,关键在check函 ...

  10. AutoIT简介

    AutoIT最初是为了帮助IT管理和维护而开发的工具,能自动完成软件的安装.由于自动化安装和自动化测试在功能需求上有许多相似之处,都要模拟用户对软件进行操作,并验证执行的结果,所以,AutoIT逐渐成 ...