草庐IT

【MRTK】HoloLens 开发基础项目设置

小叶子 の 成长足迹 2023-03-28 原文

前言

前几天老板让我丢个模型打包到 HoloLens 里看看效果。好几个月没碰 HoloLens 了,结果部署的时候遇到问题,无论如何项目部署都不成功。今天终于得空,打算把这篇记录基础设置的文章翻新一下,再写一篇文章记录现在可行的部署方法,但愿往后不需要再来翻新文章了。

当前适用版本:

  • Unity 版本:2021.3.7f1c1
  • MRTK 版本:2.8.3
  • Visual Studio 版本:Visual Studio Comunity 2022

文章最近更新日期:2023.03.06

 


1  新建项目 & 导入资源

新建项目,命名为:MRTK Test

注:Unity 受到 Windows 最大路径长路的影响,如果文件路径长度超过 255 个字符,可能会出现无法编译的情况。因此,建议将项目存储在尽可能靠近驱动器根目录的位置

 

打开 Build Settings 窗口,将项目切换到 UWP 平台并修改相应的参数

 

完成之后,我们需要下载混合现实工具,使用它来为项目导入开发所需的包

注:需要安装 .NET 5.0 运行时 才能运行混合显示工具(在 VS 中可以安装)

 

下载完成之后双击打开工具

 

需要略微等待一段时间,随后点击 Start 启动工具

 

选择自己的项目路径,随后点击 Discover Feature 进行下一步

选择以下工具包,然后点击 Get Feature 验证选择

  • Mixed Reality Toolkit
    • Mixed Reality Toolkit Foundation
    • Mixed Reality Toolkit Standard Assets
  • Platform Support
    • Mixed Reality OpenXR Plugin

 

点击 Validate 验证所选的包及导入路径是否正确

如果系统返回“未检测到任何问题”,点击“确定”,然后“导入”

 

选择 Approve 将所需的包导入到项目中

最后点击 Exit 关闭工具

2  MRTK 导入设置

资源导入完成之后,选择 Yes 重启 Unity,改用新的输入系统

 

Unity 重启后会自动弹出 MRTK 项目配置器

(如果未显示,可以通过导航栏 Mixed Reality > Toolkit > Utilities > Configire Project for MRTK 手动打开配置器)

 

点击,打开 Project Settings

 

切换到 UWP 选项卡,选择使用 OpenXR

注意:

 

 

 

 

 

 

 

设置完成后打开错误提示,点击 Fix All

 

应用 MRTK 的自动设置

 

导入 TextMeshPro 相关的包

 

完成后就可以关闭配置器了

 

3  Unity 系统设置

打开 Project Settings 窗口,在 Player 界面填写组织名和项目名,项目名就是在 HoloLens 菜单中显示的名称

注:在项目名称前面添加一个下划线可以让该应用排在所有应用前面,方便开发期间进行查找

设置包名

注:包名是每个项目的唯一识别码,重复部署相同包名的应用是会覆盖安装的!!!如果需要保留多个版本,记得修改包名

 

4  项目开发

为测试场景添加MRTK 工具

 

新建一个 Cube,调整位置和大小,并为 Cube 添加所需的脚本

 

 

这里需要注意:

  • Unity 的单位为 1 米,如果使用默认缩放(1,1,1),则立方体过大,这里将立方体的大小调整为 10*10*10 cm
  • 世界原点(0,0,0)处为相机位置,就是用户眼睛所在的位置。如果将立方体生成在与眼睛相同的位置上,那么用户带上头显后必须向后移动才能看到这个立方体
  • 若想要使用手进行交互并抓取物体,则该物体必须具备几个条件:
    • 拥有 Collider 组件
    • 拥有 Object Manipular 组件(添加此组件时,会自动添加 Constraint Manager 组件)
    • 拥有 NearInteractionGrabbable 组件
  • Object Manipular 组件能够让物体变得可移动、缩放、旋转,用户可以通过一只手或两只手来完成这些操作
  • NearInteractionGrabbable 组件能够让用户直接用手接触全息影像

 

5  效果测试

点击 Play 进行测试

 

在 Unity 编辑器内进行模拟输入可以采取以下方式:

  • 更改场景中的视图
    • 水平移动相机:W / A / S / D
    • 垂直移动相机:Q / E
    • 旋转相机:鼠标右键拖动
  • 模拟手的输入
    • 模拟右手:按住空格键(松开空格键则移除该手)
    • 模拟左手:按住左 Shift 键(松开空格键则移除该手)
    • 在场景中移动手:移动鼠标
    • 模拟点击:单击鼠标左键
    • 模拟抓取:按住鼠标左键
    • 旋转某只手:按住 空格键+Ctrl 键(右手)或按住 左Shift 键+Ctrl 键(左手),然后移动鼠标
  • 固定某只手
    • 若要保持某只手持续出现(即在编辑器中模拟双手交互的情况),按下 T(左手)或 Y(右手)即可(再次按下则移除该手)

 

6 项目打包

打开 Build Settings 窗口,将测试场景添加进去。确定平台设置没有问题后,点击 Build 进行打包

等待项目打包生成

 

打包完毕,这个 .sln 文件就是我们部署所需的文件

 


参考资料

MRTK2-Unity 开发人员文档 - MRTK 2 | Microsoft Learn

混合现实工具包简介 - 设置项目并使用手势交互 - Training | Microsoft Learn

有关【MRTK】HoloLens 开发基础项目设置的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  4. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  5. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  6. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  7. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  8. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  9. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  10. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

随机推荐