【发布时间】: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
全息透镜:第一代
【问题讨论】:
标签: c# unity3d uwp hololens windows-mixed-reality