无法在 Hololens 中读取文件
Posted
技术标签:
【中文标题】无法在 Hololens 中读取文件【英文标题】:Unable to read file in Hololens 【发布时间】:2020-04-06 08:39:22 【问题描述】:我正在开发一个需要在运行时读取 hololens 中的 .obj 格式文件的应用程序。
确切地说,我要做的是将 .obj 文件保存在 hololens 中,当应用程序运行时,它应该通过 hololens 文件系统访问该文件。将文件放入资产文件夹并通过 Unity 编辑器加载不是我想要的。
我搜索了几个论坛和主题线程,许多都给出了非常相似的解决方案。我遵循一些示例代码并编写自己的代码来读取 hololens 中的文件。但是,它不起作用。
我的程序的相关部分如下:
在脚本文件的头部,导入命名空间
#if WINDOWS_UWP
using Windows.Storage;
using Windows.Storage.Pickers;
using System.Threading.Tasks;
#endif
加载obj文件的脚本接收Stream类型参数。所以我实现了这个函数“OpenFileForRead”,它接收一个文件夹路径和一个文件名作为参数,返回文件流。
private static Stream OpenFileForRead(string folderName, string fileName)
Stream stream = null;
#if WINDOWS_UWP
Task task = new Task(
async () =>
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(folderName);
StorageFile file = await folder.GetFileAsync(fileName);
stream = await file.OpenStreamForReadAsync();
);
task.Start();
task.Wait();
#endif
return stream;
我将这个函数称为:
#if WINDOWS_UWP
string objname = "Model.obj";
Stream stream = OpenFileForRead(ApplicationData.Current.RoamingFolder.Path, objname);
loadedObj = new OBJLoader().Load(stream);
#endif
“ApplicationData.Current.RoamingFolder.Path”映射到全息镜头中的“LocalAppData\SOMEAPP\RoamingState”。
所以当我在 hololens 中部署这个应用程序时,我会将设备门户中的“Model.obj”文件上传到这个应用程序的 RoamingState 文件夹。然后我运行这个应用程序,在理想情况下,它应该可以工作,但不幸的是它没有。
目前的情况是,应用可以成功部署到hololens并运行。其他 Gameobjects 可以在 hololens 中正常运行,但无法将 .obj 文件加载到场景中。
顺便说一句,“new OBJLoader().Load(stream);”已经在Unity Editor中测试过,可以成功读取和加载我PC本地文件夹中的.obj文件。所以很可能问题出在我在hololens中读取文件的方式上。但我肯定会遵循其他类似主题给出的解决方案。我很困惑,不知道到底出了什么问题?
以下是我引用并复制了一些代码的网站:
https://longqian.me/2017/02/08/hololens-file-transfer/
https://forums.hololens.com/discussion/1862/how-to-deploy-and-read-data-file-with-app
https://github.com/Maximilian-Winter/ObjHololensViewer
https://github.com/jmher019/Hololens-OBJRenderer
上面几乎都使用类似的代码来读取hololens中的文件,虽然我无法在我的设备上通过,这太令人沮丧了!
Untiy 编辑器:2018.4.0f1
全息透镜:第一代
【问题讨论】:
【参考方案1】:我之前在使用 Hololens (v1) 和 Unity 读取数据时遇到了很多问题。我花了 ages 来找出原因......尤其是当我发现这是 Unity 中的一个错误时。我查看了我的旧论坛帖子,发现您的 Unity 版本仍然存在此问题。
见:https://forum.unity.com/threads/how-to-access-files-folders-on-hololens-with-il2cpp.543022/
请注意,来自 Unity 的人(几乎是最后一个帖子)说:
是的,我愿意。该修复程序适用于 2019.1.8f1 和 2018.4.3f1。它还没有 > 降落到 2019.2 或 2019.3。
你只是有点落后。我会正确备份您的项目,并尝试安装新的 Unity。我记得在升级使所有 Visual Studio 工具再次正常工作后,我也遇到了问题(与 Win10 SDK 版本有关?)。
最后,我不得不更改 XML 清单文件中的权限,因为 Unity 没有添加正确的权限,即使在应用程序设置中更改它也是如此。不幸的是,我不记得具体是什么,而且由于在家工作,现在无法完成这个项目。
编辑:我在 2019.1 发行说明中找到了对修复的引用。我在 2018.x 中找不到它:
https://unity3d.com/unity/whats-new/2019.1.8:
通用 Windows 平台:修复了 System.IO API 无法处理 IL2CPP 脚本后端上的应用程序和 AppData 目录之外的文件。 (1063768, 1156200)
以及实际的 issuetracker 问题:
https://issuetracker.unity3d.com/issues/uwp-il2cpp-file-dot-exists-method-returns-false
我认为这也可能是您的问题。
【讨论】:
以上是关于无法在 Hololens 中读取文件的主要内容,如果未能解决你的问题,请参考以下文章
.dll、.winmd 可以在 Unity 中读取,但不能在 XAML 项目中读取
Streamreader 在读取大型 JSON 文件时无法读取服务器 500 错误中的文件