HoloLens开发手记 - 构建2D应用 Building 2D apps
HoloLens可以让我们在真实世界中看到全息图像内容。但是它本质上还是一台Windows 10设备,这意味着HoloLens可以以2D应用形式运行Windows Store里的大部分UWP应用。
目标平台设为Windows.Universal Targeting Windows.Universal
微软过去几年平台一直在变革,所以开发者往往会有不同的起点,所以下面会给出一些指南,来帮助不同起点的开发者顺利的迁移代码带UWP平台上。
不同的起点 Starting Points
这几年大家接触的Windows平台会有很多,下面分别提供针对他们的指引。
起点 |
AppX Manifest清单目标平台 |
如何迁移到UWP? |
---|---|---|
Windows Phone (Silverlight) | Silverlight App Manifest清单 | Migrate to WinRT |
Windows Phone 8.1 Universal | 不包含目标平台的8.1 AppX Manifest清单 | Migrate your app to the Universal Windows Platform |
Windows Store 8 | 不包含目标平台的8 AppX Manifest清单 | Migrate your app to the Universal Windows Platform |
Windows Store 8.1 Universal | 不包含目标平台的8.1 AppX Manifest清单 | Migrate your app to the Universal Windows Platform |
修改目标平台为Windows.Universal Change your Target to Windows.Universal
按照指引文档适配后,你的应用可以运行与UWP平台上啦,包括手机、PC、XBox和HoloLens等等。
现在让我们打开 AppX的项目清单文件,确保你的UWP应用可以在HoloLens上运行。
- 打开你的VS项目,导航到清单文件
- 右键Package.appxmanifest清单文件,选择
- 确保在<Dependencies>节下的目标平台是Windows.Universal
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10240.0" MaxVersionTested="10.0.10586.0" />
</Dependencies>
- 保存清单文件
你可以使用任何文本编辑器来修改此清单文件,效果都一样。
在模拟器上运行应用 Run in the HoloLens Emulator
现在你可以直接生成项目并在HoloLens模拟器上运行你的应用。
- 确保你已经安装了HoloLens模拟器
- 选择x86作为目标平台架构
- 选择HoloLens模拟器作为部署目标
- 开始在模拟器上进行调试
- 你可以使用键盘鼠标来模拟HoloLens的操作,来测试你的应用
后续步骤 Next Steps
启动应用时可能会出现以下两种情况:
- 应用在被放置好后显示闪屏图片后立即运行,这表示一切正常。
- 应用在被放置好后出现载入动画,最后仍然只显示闪屏图片,这说明你的应用启动时发生错误,需要解决。
如何调试 How to debug
HoloLens是新出现的Windows 10设备,所以许多UWP API在HoloLens上仍处于测试和开发阶段。下面是一些我们发现的问题:
- 应用启动时不支持文件系统查询操作
- 使用Web认证代理或Web客户经理以外的传统认证方式
- 启动时会较深入的查询硬件设备
- 启动时会使用日历、联系人、协议等API
- 使用一些大的第三方库可能会导致不能通过HoloLens上的审核
为搞明白是什么原因导致你的应用不能正常启动,你需要进行调试。
通过调试器运行应用 Running your UWP app in the debugger
调试步骤很简单,通过菜单Debug > Start Debugging即可。
- 如果应用发生未处理异常会第一时间被调试器捕获,VS里会显示相关的异常信息。如果你已经在应用里使用try catch做了异常捕获处理,那么异常信息可以被你的代码获取到,可以像下图那样显示出来。
- 你也可以通过打断点单步调试来详细定位到问题代码块,一般来讲可以解决大部分问题。
了解应用错误的原因 Understanding the failure
正如上文提到的,HoloLens开发者版存在一些由测试和开发中的API导致的已知问题。如果你的应用使用了潜在问题API列表中的API,那么可以通过Windows Feedback工具反馈给微软。
如何打开Windows Feedback工具
- 手势唤出开始菜单
- 打开Windows Feedback应用
- 选择Developer Platform,然后发送出错细节给微软
微软会持续地修复UWP API的问题。但是对于一些因为设计时就不支持HoloLens的API,下面是一些可能有帮助的解决模式:
错误码 Error codes
- 不应该返回一个特殊的HRESULT错误,因为这个API目前还没完善。 相反,API应通过使用空集合,布尔返回值,显式状态代码等抛出错误信息。请注意,如果API已经由于编程错误(例如传递无效参数)而返回HRESULT,则它将 继续酌情返还这些错误。
集合 Collections
- 当我们使用属性索引器或者方法的返回值是集合时,不应该简单地直接返回一个null对象,而最好返回一个数量为0的集合对象。
- 在一些罕见的情况下,API会暴露一个可读/写的集合类型属性,允许应用程序提供自己的值。 在这些情况下,如果API在完全功能的情况下已经返回null,它应该在部分功能的情况下继续返回null。 注意,这是一个API设计的反模式,大多数UWP API一般不应该遵循它。
异步方法 Asynchronous functions
- 不应该从Async异步方法返回空IAsyncAction或IAsyncOperation结果。 相反,它们将返回已经处于任务完成状态并具有适当结果(空集合,状态代码等)的有效对象。
事件 Events
- 事件不应该失败或者忽略事件注册行为。相反,API应该接受事件注册/取消事件注册,但绝不会引发事件。 API必须持有任何已注册的事件处理程序(而不是默默地忽略它们),因为应用程序可能无意中依赖注册的事件进行生命周期管理。
更新UI Update your UI
现在你的应用在HoloLens中以2D面板的形式展示在世界中,我们下面应该让我们的应用看起来更漂亮。下面使一些要考虑的内容:
- HoloLens将以固定分辨率和DPI运行所有2D应用,相当于853x480有效像素。 考虑你的设计是否需要在这个比例下进行细化,并考虑查看我们的2D UI指南,来提高用户体验。
- HoloLens不支持2D动态磁贴。 如果您的核心功能显示活动磁贴上的信息,请考虑将该信息移回应用程序。
- HoloLens不支持共享合同,2D打印,全屏模式,投射和可能在您的应用程序中的其他功能。
新的输入可能性 New input possibilities
HoloLens使用先进的深度传感器感知世界和用户。 这使得高级手势得以使用,如bloom和air-tap手势。 强大的麦克风还确保了较好的语音体验。 HoloLens负责处理UWP应用的所有复杂内容,将您的Gaze和手势抽象并转换为常规UWP输入机制的指针事件。 例如,HoloLens Clicker模拟Air-Tap手势,但2D应用程序不需要知道输入来自哪里,它们只知道发生了指针点击事件。
以下是将UWP应用迁移到HoloLens时应了解的关于输入方式的高级概念/方案:
- 当用户注视应用时,Gaze会触发鼠标悬停事件,可能意外地触发菜单,弹出窗口或其他用户界面元素,
- 凝视不如鼠标输入那么精确。 对HoloLens应该使用适当大小的点击目标,类似于触摸友好的移动应用的UI。 应用UI边缘附近的小元素特别难以与之交互。
- 用户必须可以在应用中切换输入模式,从滚动到拖动到两个手指平移手势。 如果您的应用是为触摸输入设计的,请考虑确保没有主要功能只依赖手势。 如果是,请考虑使用其他输入机制,例如可以启动手指平移手势的按钮。 例如,地图应用程序可以使用两个手指平移进行缩放,但具有加号,减号和旋转按钮,以模拟与单次点击相同的缩放交互。
语音输入是HoloLens体验的关键部分。 我们已经启用了在Windows 10中的所有语音API为HoloLens上的Cortana提供支持。
发布和维护你的UWP应用 Publish and Maintain your Universal app on HoloLens
一旦你的应用可以正常运行,那么你就可以打包它并将它上传到应用商店中。
HoloLens开发手记 - 构建2D应用 Building 2D apps的更多相关文章
- HoloLens开发手记 - HoloLens真机上手简评
千呼万唤始出来,终于今天拿到了HoloLens真机. 使用体验 使用自带的应用录制了一段使用视频,如下 设备概览 包装盒 本体 试戴 实际效果 GalaxyExplorer试玩 全息图像贴到现实场景表 ...
- HoloLens开发手记 - 应用程序模型 App model
HoloLens使用Universal Windows Platform (UWP)提供的应用模型.UWP应用模型定义了应用如何被安全和完全地安装.更新.版本控制和移除.它管理了应用生命周期 - 应用 ...
- HoloLens开发手记-开发概述Development overview
开发HoloLens全息应用将使用UWP平台(Universal Windows Platform),所有的HoloLens应用都是Win10通用应用,所有UWP通用应用都可以在HoloLens上运行 ...
- HoloLens开发手记 - HoloLens上的应用视图 App views on HoloLens
运行在HoloLens上的应用可能包含2种视图,分别是全息视图和2D视图.应用可以在全息视图和2D视图之间转换,这常被用于访问系统提供的接口,例如虚拟键盘.拥有至少一个全息视图的应用被归类为全息应用. ...
- HoloLens开发手记 - 使用HoloLens模拟器 Using HoloLens emulator
首先下载HoloLens模拟器 HoloLens模拟器运行在没有真机的情况下在你的PC上测试应用,属于HoloLens开发工具系列.模拟器使用了Hyper-V虚拟机.通常通过传感器获取的人体和环境输入 ...
- HoloLens开发手记 - Unity development overview 使用Unity开发概述
Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必 ...
- HoloLens开发手记 - 手势输入 Gesture input
手势是HoloLens三个首要输入形式之一.一旦你使用凝视定位了一个全息图像,手势允许你与它交互.手势输入允许你使用手或者点击器原生地与全息图像交互. 手势之外,你也可以在应用中使用语音输入来交互. ...
- HoloLens开发手记 - 使用Visual Studio Using Visual Studio
不论你是否使用DirectX或Unity来开发全息应用,你都会使用Visual Studio 2015来进行调试和部署应用.在本部分,你将会学习以下内容: 如何通过Visual Studio将你的应用 ...
- HoloLens开发手记-全息Hologram
HoloLens使我们可以通过周边世界的光线和声音来创建全息场景和物体,使得它们像真实物体那样.全息场景能够响应你的凝视.手势和语音指令,同时还会和你周边世界的表面交互.借助全息场景,你可以在周边世界 ...
随机推荐
- c++中冒号(:)的作用
1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; } ; X ...
- 第十七篇 --ANDROID DisplayManager 服务解析一
ANDROID从版本4.2开始提供了一个显示管理服务DisplayManagerService,支持多种显示类型的多个显示器的镜像显示,包括内建的显示类型(本地).HDMI显示类型以及支持WIFI D ...
- PAT (Advanced Level) 1006. Sign In and Sign Out (25)
简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...
- 浅谈Spring事务隔离级别
一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_ ...
- spring3mvc与struts2比较
目前企业中使用SpringMvc的比例已经远远超过Struts2,那么两者到底有什么区别,是很多初学者比较关注的问题,下面我们就来对SpringMvc和Struts2进行各方面的比较: 1. 核 心控 ...
- 关于NOMINMAX这个预处理宏
标准库在<algorithm>头中定义了两个模板函数std::min() 和 std::max().通常用它可以计算某个值对的最小值和最大值.可惜在 Visual C++ 无法使用它们,因 ...
- OSX下编译安装opencv3.1.0与opencv_contrib_master
OSX版本10.11.3 1.安装homebrew,打开终端,写入指令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Hom ...
- 求两个字符串最大的子字符串C#
此代码由Java改写而来,字符串支持中文格式的. string str1 = "中国ab-15"; string str2 = "中国ab-23"; byte[ ...
- 对AD域进行定期自动备份设置图解
今天为大家讲解一下,如何对域进行定期的备份,因为如果域出问题了,在公司里那可就不好玩了啊,对做定期备份,在域出问题的时候可以及时恢复,减少对域重建而浪费大量的时间,同样也耽误公司员工的工作,这样的事情 ...
- tp框架 使用ajax
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...