无法在 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.8f12018.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 中读取文件的主要内容,如果未能解决你的问题,请参考以下文章

Hololens创建读取删除本地文件

.dll、.winmd 可以在 Unity 中读取,但不能在 XAML 项目中读取

家庭版.net无法读取配置文件

Streamreader 在读取大型 JSON 文件时无法读取服务器 500 错误中的文件

NestJs:无法读取模块文件中的环境变量但能够读取服务文件?

无法在继承进程中读取文件