c# - 在 HoloLens 2 上的 Unity 应用程序中打开文件浏览器
问题描述
所以看起来这将是一个简单的解决方案,但由于我找不到任何关于如何做到这一点的文档,它实际上与暴力猜测密码相同。
环境
- Unity 版本:2019.3.1、2019.3.4(当前)
- 平台:通用Windows平台
- MRTK:2.2、2.3(当前)
- HoloLens 2 操作系统:Windows 全息操作系统
我正在努力实现的目标
- 我按下一个按钮,文件浏览器/资源管理器出现在我的 Unity 场景中
问题
- 我无法在 HoloLens 2 中启动文件浏览器/资源管理器。
背景/上下文
使用 MRTK 2/HoloLens 2,您无需退出 Unity 应用程序即可启动外部应用程序。HoloLens 1 无法做到的事情。Microsoft 在他们的 Unity 示例包中提供了证明:Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteraction.Examples.unity
一旦您将 .Foundation 和 .Examples 外部包加载到您的 Unity 项目中。
在提供的场景中,在所有呈现的对象中,右侧有两个按钮,按下时将启动边缘浏览器或操作系统的设置应用程序。这是通过一个附加的启动 URI 脚本来完成的,该脚本.OpenURL
在用户通过 GameObject 的检查器提供的字符串上运行。
以及运行用户输入字符串的代码片段(由 Microsoft 在 MRTK2 中提供):
public void Launch(string uri){
...
Application.OpenURL(uri);
...
}
到目前为止我尝试过的
由于桌面上的 Windows 10 和 Windows 全息操作系统非常相似,当 Unity 处于播放模式时按下这些按钮时,这些按钮将完全发挥作用,启动计算机的默认浏览器和 Windows 10 的设置应用程序。
在此假设下我查找了如何打开文件浏览器/资源管理器,并能够使用explorer
文本框中的字符串成功启动它,但仅限于 Windows 10 桌面。在 HoloLens 2 上运行时它不起作用。不出所料,Windows 10 和 Windows 全息操作系统之间存在差异,因此测试它有点乏味,因为我每次需要测试时都需要构建。到目前为止,我测试过的字符串是:
explorer
explorer.exe
ms-explorer
ms-browser
ms-storage
ms-storage.storagefile:// (and without the ://)
https://C:\
等等....
认为这Application.OpenURL
可能不是唯一/最好的路线,我还尝试了不同的脚本:
public void Opener(){
System.Diagnostics.Process.Start("explorer.exe");
}
但再一次,这种方法在 Windows 10 桌面上完美运行,但在 HoloLens 2 中却不行。我可以继续提供更多示例和解释,但我已经担心我必须将这篇文章重新定义为长度为 Wikipedia 的文章它已经到了。
就是这样。我不知道从这里去哪里。因此,当我继续随机进入 Googleverse 并查看我能找到哪些相关的片段来测试并证明它们在桌面而不是 HoloLens 2 上工作时,想法/建议是什么?我不相信这是一个复杂的问题/解决方案。但据我所知,这是一个非常具体的文档,由于 HoloLens 2 仍然是新的和稀缺的,因此文档为零。
(另外我不能为 HoloLens 2 创建一个新标签,不够好。所以现在我必须使用常规的 hololens 标签)
解决方案
我一直在与 Microsoft 的开发人员支持人员进行一些交流,他们在透露有关此主题的更多信息方面非常有帮助,我们同意在这里记录下来以防有人将来会遇到这种需求/问题。
目前无法从 HoloLens 2 上的 Unity 应用程序中访问本机文件浏览器。在第 3 方解决方案之前,最好的本机操作方案是使用 FileOpenPicker:
https ://docs.microsoft.com/en-我们/windows/混合现实/app-model#file-pickers
除了完全原生的解决方案之外,下一个最佳做法是使用资产商店中的第 3 方资产。由于我的开发人员环境/工作限制,我不确定我个人是否能够使用此方法,但对于大多数其他人来说,这是一个可行的行动方案。
我正在考虑将其作为 HoloLens 2 当前状态的官方答案,但如果未来情况发生变化,我很乐意对此进行修改。
tl;博士版本:
目前(2020 年初)文件资源管理器无法通过应用程序原生访问,最佳/最接近的原生解决方案是使用FileOpenPicker或 Unity Asset Store 上的第 3 方资源。推荐阅读
- java - 尝试使用队列外的 GET 消息设置 MQ(不是 JMS)
- ios - 在 SwiftUI 应用程序构建中“无法完成 LSBundleWrapper”以供发布
- c# - 使用 UserID 是 ASP.NET MVC (C#) 中的关键
- spring-boot - ZonedDateTime 在 2.6.x 的 Hsqldb 中以一小时班次检索
- reactjs - 本地反应组件未从自动导入建议中导入
- python - 如何创建以 1 开头的标题
- python - Python 用类类型提示类方法
- git - Git diff 在本地分支中更改但在 master 中未更改
- mysql - 如何更新表中的值(SQL)?
- c# - 您如何在 ASP.NET 中与 SPA 静态文件一起提供“普通”静态文件?