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使我们可以通过周边世界的光线和声音来创建全息场景和物体,使得它们像真实物体那样.全息场景能够响应你的凝视.手势和语音指令,同时还会和你周边世界的表面交互.借助全息场景,你可以在周边世界 ...
随机推荐
- Spring自学教程-声明式事务处理(六)
Spring事务处理分两种: 一.编程式事务:在程序中控制事务开始,执行和提交: 1.1 使用TransactionTemplate, 使用回调函数执行事务,不需要显示开始事务,不需要显示提交事务,但 ...
- Android面试题随笔1
1.如何让一个应用在手机上产生两个或多个图标? 在清单文件中的activity节点下配置如下:[5,7行代码] <activity android:name=".MainActivit ...
- 《数据结构与算法分析:C语言描述》读书笔记------练习1.1 求第K大的数
求一组N个数中的第k个最大者,设k=N/2. import java.util.Random; public class K_Max { /** * @param args */ //求第K大的数,保 ...
- 用OpenSSL生成自签名证书在IIS上搭建Https站点(用于iOS的https访问)
前提: 先安装openssl,安装有两种方式,第一种直接下载安装包,装上就可运行:第二种可以自己下载源码,自己编译.这里推荐第一种. 安装包:http://slproweb.com/products/ ...
- ucos任务控制块详解
Ucos实现多任务的基础包括几个方面:任务控制块,任务堆栈,中断,任务优先级,一一说起 首先,任务控制块的结构如下 //系统在运行一个任务的时候,按照任务的优先级获取任务控制块,再在任务堆栈中获得任务 ...
- 单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等(转)
源:单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等 //modebus_rtu.c /***************************************** ...
- IOS开发之IOS8.0最新UIAlertController
最近苹果更新的IOS8 对以前进行了很大的修改, 更新的API也让人捉急,据说iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.比如全新的UIPrese ...
- UVa 10945 - Mother bear
题目大意:给一个字符串,判断是否回文(忽略大小写,忽略非字母字符). #include <cstdio> #include <cctype> #include <cstr ...
- css(二) block,inline和inline-block概念和区别
转: http://www.cnblogs.com/KeithWang/p/3139517.html 总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-leve ...
- 关于Apache,Mysql,PHP之间的关系
声明:以下为作者原创,转载请注明文章来源地址. 通过百度百科我们知道 Apache(全称Apache HTTP Server):是世界使用排名第一的Web服务器软件.可以在大多数计算机操作系统中运行, ...