HoloLens 2 应用开发流程笔记

news2024/12/24 0:37:42

本文链接:微信推文阅读效果更佳

目录

  • 安装工具
  • 应用开发举例
    • 配置 Unity
      • 创建新的 Unity 项目
      • 切换生成平台
    • 导入和配置资源
      • 导入 MRTK Unity 基础包
      • 配置 Unity 项目
      • 为 XR SDK 配置项目设置
      • 创建场景并配置 MRTK
    • 交互例子
      • 添加并调整第一个立方体
      • 向立方体添加脚本
      • 添加第二个立方体
      • 在播放模式下抓取和移动立方体
      • 在 Unity 中生成应用程序
      • 生成并部署应用程序
      • 配对设备
      • 在 HoloLens 上运行应用

笔者在 2020 年首次接触到 HoloLens 2 应用的开发,直到 2021 年开发出一个简单的 AR 程序,并作为一个会议论文的演示部分,着实为论文的成功接收立下了汗马功劳。若干年后的今天需要对会议论文进行扩刊,然而再次想要设计一个新的 HoloLens 2 应用时却发现此前的程序已荡然无存。蓦然回首,是似曾相似的陌生,是无可奈何,又要从头再来。因此,下决心把开发的细节记录下来,以备不时之需。在此分享给诸君,欢迎在留言区交流和讨论!
本文主要参考混合现实文档,使用 HoloLens 2 开发一个简单的 AR 应用。本文旨在通过一个简单的开发案例演示 HoloLens 2 应用的详细的开发流程,是开发复杂应用的基石。

Microsoft Hololens 2

安装工具

除了选择 Unity 游戏引擎进行开发,除此之外,用户还可以选择其它游戏引擎进行开发。

选择 Unity 开发项目,可以使用 Unity 的混合现实工具包的输入模拟来测试各种类型的输入交互,例如手势跟踪和眼动跟踪输入。
混合现实工具包 (MRTK) 是用于构建虚拟现实 (VR) 和增强现实 (AR) 的混合现实体验的跨平台工具包。

需要安装:

工具注释
安装最新版本的 Windows 10 或 11通过 设置 > 更新&安全 > 对于开发人员` 在电脑上启用开发人员模式。
安装 Visual Studio 集成开发环境安装 Visual Studio 2022 请确保安装以下工作负载:.NET 桌面开发 / 使用 C++ 的桌面开发 / 通用 Windows 平台 (UWP) 开发 / 使用 Unity 进行游戏开发
HoloLens 2 仿真器使用可选仿真器可在没有 HoloLens 的情况下在 HoloLens 虚拟机映像上运行应用程序。

应用开发举例

开发流程包括:

  1. 为 Windows Mixed Reality 配置 Unity

  2. 导入和配置资源

配置 Unity

首先,我们将新建 Unity 项目,并为该项目配置 Windows Mixed Reality 开发。 Unity 提供了一些特定于混合现实的行为,这些行为可以通过项目设置进行修改。

创建新的 Unity 项目

  • 启动 Unity Hub。

  • 项目 选项卡中,单击 新建项目

  • 单击 新建项目 下面的下拉列表,然后选择你需要的编辑器版本。如下图所示,所使用的版本是 2021.3.16f1c1

  • 确保所选模板为 3D Core

  • 项目名称 框中,输入项目的名称,例如 stgae

  • 位置 框中,单击文件夹图标,然后导航到要在其中保存项目的文件夹,然后选择它。 也可以新建一个文件夹。

  • 单击 创建项目,会在 Unity 中打开项目。

<,>

切换生成平台

  • 在菜单栏中,选择 文件 > 生成设置

  • 生成设置 窗口中选择 通用 Windows 平台

确保以下设置处于以下选项:

设置选项
体系结构ARM 64 位
生成类型D3D 项目
目标 SDK 版本已安装最新版本
最低平台版本10.0.19041.0
Visual Studio 版本已安装最新版本
生成和运行位置本地设备
生成配置发布(调试存在已知性能问题)

选择后,如下图所示:

  • 单击 切换平台 按钮,Unity 在切换平台时会显示进度栏。

  • 切换平台过程完成后,关闭 生成设置 窗口。

导入和配置资源

混合现实工具包是一个开源的跨平台开发工具包,可将其导入 Unity 混合现实项目中。 尽管可以在不使用该包的情况下创建 Windows Mixed Reality 应用,但建议利用它的组件和功能来加速开发。

导入 MRTK Unity 基础包

使用混合现实功能工具 (Mixed Reality Feature Tool) 将混合现实工具包导入项目:

  • 请从 Microsoft 下载中心下载混合现实功能工具 的最新版本。

<,,,>

  • 下载完成可执行文件 MixedRealityFeatureTool.exe 后,然后使用它启动混合现实功能工具。

  • 在混合现实功能工具中,选择 启动

<,>

  • 选择 浏览 按钮(它是下图中的 三个点 按钮),导航到你的项目,然后将其打开。

  • 选择 发现功能

注意:工具刷新源中的包时可能需要等待几秒钟。

  • 发现功能 页上,请注意有可用包组的列表。

  • 单击 混合现实工具包(0/10) 左侧的 + 按钮,然后选择 混合现实工具包基础 的最新版本。

  • 单击 平台支持(0/5) 左侧的 + 按钮,然后选择 混合现实 OpenXR 插件 的最新版本。

注意:Unity 2019 及之前的版本,其配置稍有不同,详见

  • 点击 获取功能 后选择 验证 以验证所选的包。 系统应显示 未检测到任何验证问题

<,>

  • 选择 确定 关闭对话框,然后选择 导入

  • 出现提示时,选择 批准 以将混合现实工具包添加到项目中。

<,,>

配置 Unity 项目

导入包后,系统将显示 MRTK 项目配置器

如果未显示,可从 混合现实 > 工具包 > 实用程序 > 为 MRTK 配置项目 手动打开该配置器。

  • 编辑 > 项目设置 > XR 插件管理 下:

首先,安装插件管理程序:

然后,确保位于 通用 Windows 平台 设置中,并且已选中 启动时初始化 XRWindows Mixed Reality

为 XR SDK 配置项目设置

  • 在 Unity 菜单中选择 编辑 > 项目设置,打开 项目设置 窗口,在窗口中,选择 XR 插件管理 > Windows Mixed Reality > 运行时设置,然后在 深度缓冲区格式 下拉列表中,选择 16 位深度

  • 项目设置 窗口中,选择 播放机 > 发布设置,然后在 包名称字段中输入合适的名称;例如 stgae-hand

创建场景并配置 MRTK

  • 在菜单栏中,选择 文件 > 新建场景

  • 新建场景 窗口中,选择 基本(内置),然后单击 创建

  • 在菜单栏中,依次选择 混合现实 > 工具包 > 添加到场景并配置

混合现实工具包 设置会显示在检查器中。

在将 MRTK 添加到场景并对其进行配置后,以下两个新对象会被添加到 层次结构 窗口中:MixedRealityToolkitMixedRealityPlayspace

MixedRealityToolkit 对象包含工具包本身。 MixedRealityPlayspace 对象可确保在场景中正确管理头戴显示设备/控制器和其他必需系统。

主摄像机 对象成为 MixedRealityPlayspace 对象的子对象。 这使得游戏区域能够与 SDK 同时管理摄像头。

  • 在检查器中,验证配置文件下拉列表是否显示 DefaultMixedRealityToolkitConfigurationProfile

然而,在 DefalutMixedRealityTookitConfigurationProfile 中会自动识别空间场景,绘制三角面片,同时也有手部渲染;而在 DefaultHoloLens2ConfigurationProfile 中无三角面片,但是也没有手部渲染。

下面通过新建 Profile 并进行配置来实现既渲染手,又不渲染空间面片。

  • 点击 复制并自定义配置

<,,>

  • Spatial Awareness 是空间扫描和生成三角面片,因此不用打开。

  • Input 选择 DefaultMixedRealityInputSystemProfile,并克隆以便自定义手部骨架。
    • 复制 铰接手部跟踪 的配置可以设置手部的现实方式

<,,,>

交互例子

ObjectManipulatorNearInteractionGrabbable 脚本支持 手部和运动控制器 输入模型的 直接操作 模态。 向对象附加脚本后,用户可以手来移动、缩放或旋转该对象。在本例中,我们将创建两个立方体,向它们附加必要的脚本,然后四处移动它们。

添加并调整第一个立方体

  • 右击场景名,选择 GameObject > 3D 对象 > 立方体

立方体的默认大小为 1 m 2 ^2 2,这对我们来说太大了。 我们将它缩小到 20$\times 20 20 20\times 20 c m 20 cm 20cm^3$。

  • 选择该立方体,然后在 Inspector 中将立方体的 Tranform/Scale 值更改为 X = 0.2 , Y = 0.2 , Z = 0.2 X = 0.2, Y = 0.2, Z = 0.2 X=0.2,Y=0.2,Z=0.2

立方体在场景中的默认位置为 ( 0 , 0 , 0 ) (0,0,0) (0,0,0)。 这意味着立方体与用户的头戴显示设备位于同一位置,用户无法看到立方体,直到他们向后移动。 我们将更改立方体的位置值,使它位于更便于查看的位置。

  • Inspector 中,将立方体的 Tranform/Position 值更改为 X = − 0.2 , Y = 0.1 , Z = 0.5 X = -0.2, Y = 0.1, Z = 0.5 X=0.2,Y=0.1,Z=0.5

我们希望能看到立方体的三个面,因此还会更改立方体的旋转。

  • Inspector 中,将立方体的 Tranform/Rotation 值更改为
    X = 9 , Y = 14 , Z = 0 X = 9, Y = 14, Z = 0 X=9,Y=14,Z=0

向立方体添加脚本

若要使对象在使用跟踪手时可抓取,必须附加三个组件:

  1. 碰撞体组件(无需在此执行任何操作 - Unity 立方体默认已附加盒型碰撞体)
  2. 对象操控器(脚本) 组件
  3. NearInteractionGrabbable(脚本)组件
  • 立方体仍然处于选定状态时,在 Inspector 窗口中,单击 Add Component 按钮,然后搜索并选择 Object Manipulator 脚本。

ObjectManipulator 脚本能够让对象变得可移动、可缩放和可旋转,这些操作可通过一只或两只手来实现。 添加 Object Manipulator 脚本时,系统会自动添加 Constraint Manager 脚本,因为前者依赖于后者。

  • 重复相同的步骤,向立方体添加 NearInteractionGrabbable 脚本。

通过 NearInteractionGrabbable 脚本,用户能使用模拟手来触碰和抓取附近的对象。

添加第二个立方体

  • Hierarchy 中,右键单击立方体,然后选择 Duplicate。 系统显示复制的立方体,名称为 Cube (1)

<,>

  • 右键单击原始立方体,选择 Rename,然后将其命名为 NearCube

  • 右键单击复制的立方体,选择 Rename,然后将其命名为 FarCube

目前,Scene 视图中似乎只有一个立方体。 这是因为 NearCubeFarCube 的位置完全相同。 我们可以更改 FarCube 的位置和旋转。

  • 使 FarCube 仍处于选定状态,将其 Transform 组件中的值更改为:
    • 位置: X = 0.6 , Y = 0.1 , Z = 1.1 X = 0.6, Y = 0.1, Z = 1.1 X=0.6,Y=0.1,Z=1.1
    • 旋转: X = 27 , Y = 0 , Z = 0 X = 27, Y = 0, Z = 0 X=27,Y=0,Z=0

现在,摄像机能看到 NearCube 位于左侧,FarCube 位于右侧稍远处。 要确认这一点,请在 Hierarchy 中选择 Main Camera,然后在 Scene 窗口中查看 Main Camera 窗口。

在播放模式下抓取和移动立方体

  • 单击播放按钮。 项目开始播放时,视图切换到 Game 窗口。

  • 按空格键,使模拟右手显示在视图中。

  • 将模拟手朝 NearCube 移动,直到它触碰到立方体的一面或底部。

  • 单击鼠标左键(这会使手抓取立方体),然后在场景中拖动立方体。

  • 要抓取和移动 FarCube,我们将使用模拟手附带的远指针。

在 Unity 中生成应用程序

  • 在菜单栏中,选择 File > Build Settings...

  • 生成设置 窗口中,单击 添加打开的场景 按钮,将当前场景添加到 生成中的场景 列表中 。

  • 单击 生成 按钮。

  • Build Universal Windows Platform 窗口中,导航到希望用于存储生成的文件夹,或者新建一个文件夹并导航到它,然后单击 选择文件夹 按钮开始生成过程。

屏幕上将显示一个进度栏,表明生成的进展情况。

生成并部署应用程序

笔者在生成时遇到了一个问题 error MSB3774: 找不到 SDK“WindowsMobile, Version=10.0.19041.0”,通过该方法得到解决。

  • 生成过程完成后,Windows 文件资源管理器打开并显示该生成文件夹。 在文件夹内浏览并双击解决方案文件,这可在 Visual Studio 中将它打开:

<,>

  • 为 HoloLens 配置 Visual Studio - 选择 MasterRelease 配置以及 ARM64 体系结构:

  • 单击部署目标下拉菜单,然后执行下列操作之一:

如果要通过 Wi-Fi 进行生成和部署,请选择 远程计算机

  • 设置远程连接:在菜单栏上,选择 项目 > 属性

  • 在项目的 属性页 窗口中,选择 配置属性 > 调试

  • 单击 要启动的调试器 下拉菜单,然后选择 远程计算机(如果尚未选择)。

  • 计算机名 字段中输入设备的 IP 地址。

<,>

注意:需要在 HoloLens 中的 Holographic Remoting 远程连接调试程序查看 HoloLens 在局域网中的 IP 地址。

  • 身份验证模式 设置为 通用(未加密协议)

  • 将 HoloLens 连接到计算机,然后在 Visual Studio 中执行以下操作之一:

  • 若要部署 HoloLens 并自动启用为附加 Visual Studio 调试程序的应用,选择 调试 > 开始执行(不调试)
    要部署 HoloLens,而不自动启动应用,选择 生成 > 部署解决方案

配对设备

  • 首次将应用从电脑部署到 HoloLens 时,系统会提示输入 PIN。 创建 PIN:

  • 在 HoloLens 中,转到 设置 > 更新&安全 > 针对开发人员

  • 选择 配对。这会显示 HoloLens 中的 PIN。

  • 在 Visual Studio 的对话框中输入该 PIN。
  • 完成配对后,在 HoloLens 中,选择 完成

现在,你的电脑已与 HoloLens 配对,你可以自动部署应用。

<,,>

在 HoloLens 上运行应用

应用完成生成后,在 HoloLens 的 开始 菜单中找到你的应用的应用磁贴,然后选中它。

<,>

完整演示视频见:HoloLens 2 应用演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20篇高质量程序人生文章分享,做开发不仅仅只有代码

我一直觉得&#xff0c;我们做开发&#xff0c;不应该只有代码&#xff0c;合上公司的电脑脱离了公司的产品需求就脱离了程序&#xff0c;而应该结合软件的程序思维去更多的思考我们所处的生活和空间&#xff0c;从而指导自己面对更多的未曾见过的人与事&#xff0c;这可能就是…

Java基础之异常处理

一、小试牛刀 num1 / num2 当除数为零时&#xff0c;程序就会抛出异常&#xff0c;程序就会崩溃而导致退出。 我们可以通过异常处理机制来解决该问题 如果我们认为一段代码可能发生异常&#xff0c;可以使用try-catch-finally异常处理机制来解决。从而保证程序的健壮性。 将可能…

前端工程化-多维度检测重复代码

更多文章可关注我的个人博客&#xff1a;https://seven777777.github.io/myblog/ 1. 检测项目重复代码 1.1 检测方案&#xff1a;jscpd 方法一&#xff1a; 全局安装jscpd依赖npm i -g jscpd项目根路径执行&#xff1a;jscpd -p "src/**/*.js" -k 15 -l 5 方法二…

【黑马SpringCloud(3)】Docker

Docker初识DockerDocker与虚拟机的区别Docker架构DockerHubDocker镜像操作Docker容器操作数据卷自定义镜像镜像结构Dockerfile构建Java项目基于java:8-alpine镜像&#xff0c;构建java项目集群部署微服务Docker-Compose镜像仓库搭建私有镜像仓库Docker安装&#xff1a;https://…

Go第 14 章 :文件操作

Go第 14 章 &#xff1a;文件操作 14.1 文件的基本介绍  文件的概念 文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的 word文档,txt文 件,excel 文件…都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声 音… …

排序分页多表查询

文章目录一、排序ORDER BY排序规则单列排序多列排序二、分页LIMIT背景实现格式举例公式优点三、多表查询笛卡尔积&#xff08;或交叉连接&#xff09;的理解解决笛卡尔积问题多表查询分类等值连接非等值连接自连接内连接 vs 外连接SQL99实现多表查询基本语法内连接&#xff08;…

测试人员怎么对待Bug

测试人员如何描述发现的Bug咱们提Bug至少要包含这个问题出现的版本&#xff0c;问题出现的环境&#xff0c;问题出现的步骤&#xff0c;预期结果&#xff0c;实际结果。但不限于标题&#xff0c;bug归属&#xff0c;bug等价等等举个栗子&#x1f601;很容易发现二维码被登入页面…

深入分析三层网络交换机的原理和设计

引言 传统路由器在网络中起到隔离网络、隔离广播、路由转发以及防火墙的作业&#xff0c;并且随着网络的不断发展&#xff0c;路由器的负荷也在迅速增长。其中一个重要原因是出于安全和管理方便等方面的考虑&#xff0c;VLAN(虚拟局域网)技术在网络中大量应用。VLAN技术可以逻辑…

跨平台编译go(交叉编译)

以将一个简单的go http 部署到docker为例&#xff01; 方法一&#xff1a;构建service镜像同时拉取go镜像 Dockerfile文件 # alpine Linux发行版&#xff0c;该发行版的大小很小并且内置了Go FROM golang:alpine# 设置linux环境变量 ENV GO111MODULEon \CGO_ENABLED0 \GOOSl…

MyBatis持久层框架详细解读:MyBatis快速入门篇

文章目录1. 前言2. JDBC 存在的缺点3. MyBatis 优化4. MyBatis 快速入门5. 总结Java编程基础教程系列1. 前言 JavaEE 企业级 Java 项目中的经典三层架构为表现层&#xff0c;业务层和持久层&#xff0c;使用Java 代码操作数据库属于持久层内容&#xff0c;而 MyBatis 对 JDBC …

Appmsg:APP辅助分析神器

一、前言 在进行APP渗透测试、APP病毒分析或写APP测试报告时经常会用到APP基本信息&#xff0c;有些工具虽然可以解析APP&#xff0c;但缺少想要的信息&#xff0c;有些解析的结果不够准确&#xff0c;于是只好自研一款工具来解决。 二、定位 主要适用于以APP病毒分析、APP漏…

一个数据驱动的动态 NFT 实现方案

1 背景2022 年是 Web3 行业很不如意的一年&#xff0c;DeFi 旧力已去&#xff0c;游戏和社交应用新力未发&#xff0c;放眼望去&#xff0c;似乎只有 NFT 仍然热度不减&#xff0c;各种应用、各种概念也是层出不穷&#xff0c;几乎是独力支撑熊市当中 Web3 的希望。除了围绕 NF…

【MFC】MFC应用程序流程(11)

在WIN32应用程序中使用MFC于MFC框架创建的应用程序流程基本上一致的&#xff0c;不同之处是对MFC框架的使用。 MFC应用程序流程 应用程序类继承CWinAppEx&#xff08;类似CWinApp&#xff09;&#xff0c;编译时注入的WinMain函数利用多态机制实现应用程序初始化&#xff1a;…

LaoCat带你认识容器与镜像(番外一【Harbor】)

祝大家开工大吉呀&#xff0c;新的一年要有新的收获呀 ~ 本章内容 搭建Docker镜像私仓Harbor&#xff0c;并配置Docker私仓。 本文实操全部基于Ubuntu 20.04 宿主机 > linux服务器本身 Harbor > 2.5.3 Docker系列文章之仓库篇就介绍了Docker有俩种类型的镜像仓库&#x…

AppShark:一款针对Android应用程序的静态分析与漏洞扫描框架

关于AppShark AppShark是一款针对Android应用程序的安全测试框架&#xff0c;该工具本质上是一个静态污点分析平台&#xff0c;可以用于扫描Android应用程序中的漏洞。 AppShark除了实现行业普遍应用的数据流分析&#xff0c;还将指针分析与数据流分析融合&#xff0c;因而漏…

【项目精选】基于SpringBoot+Vue实现的仿掘金论坛系统(包含完整源码以及部署教程)

项目简介 本论坛基于SpringBootVue框架实现前后端分离&#xff0c;自适应手机端和电脑端&#xff0c;界面简洁美观&#xff0c;功能完善&#xff0c;性能高效。分为用户系统和管理系统两部分。 大厂微服务架构设计&#xff1b;代码简洁、高效无冗余&#xff1b;注释详细易阅读…

LabVIEW 在NI Linux实时设备上访问Shell

LabVIEW 在NI Linux实时设备上访问Shell有一台运行NI Linux实时操作系统的设备&#xff0c;想访问设备上的shell或终端。要使用以下任一方法与设备通信&#xff0c;必须在计算机上安装终端客户端。使用SSH连接&#xff1a;1. 打开电源并将设备连接到网络或直接连接到计算机。2.…

已解决:Linux安装Docker完整过程

① 目的 接口自动化接口需要持续集成&#xff0c;最终选择Jenkins来实现。通过docker来实现安装部署Jenkins ② 环境 Linux ③Docker的自动化安装 Docker官方和国内daocloud都提供了一键安装的脚本&#xff0c;使得Docker的安装更加便捷。 官方的一键安装方式&#xff1a; curl…

C#,索尼偏光相机(Polarization Camera)传感器IMX250和专用SDK简介

以下文字用百度翻译&#xff0c;效果一般&#xff0c;凑合看吧。2018年12月开始上市的索尼偏光相机和偏光相机专用SDK实现了高功能、高画质、高速处理。其要点在于&#xff0c;开发为不在需要专业知识的偏振信号处理的安装中花费工时&#xff0c;能够以最小限度的成本利用的SDK…

逆战成钢!大势智慧2023新春年会暨表彰大典圆满举行

2023年1月14日&#xff0c;大势智慧2023新春年会暨表彰大典如期举行。暂别了疫情的阻隔&#xff0c;大势智慧武汉总部与各分公司成员时隔两年再次迎来“面对面拥抱”。三百多名大势成员群贺新春&#xff0c;共同度过了一次难忘的年会盛典。 逆战成钢 用奋战实现业绩、规模高增…