从设备文件夹在Hololens上使用Unity 3d资产捆绑包

时间:2019-05-28 11:53:49

标签: unity3d hololens assetbundle

我们正在构建一个Hololens应用,该应用将使用设备文件夹中的资产捆绑包,但是在尝试加载捆绑包文件时出现“无法打开存档文件”错误。

由于我们对资产束没有太多经验,因此我们首先创建了一个非常简单的束文件(仅包含一些Unity原语和材料),然后我们首先尝试从Unity编辑器将其加载到应用中。可以正常运行,但是当我们将应用程序部署到Hololens中时失败了。

这是我们的加载方法:

#if WINDOWS_UWP
    public async void CallForBundles()
#else
    public void CallForBundles()
#endif
    {
        string bundleFile = "--- NO BUNDLE ---";
#if UNITY_EDITOR
        bundleFile = @"D:\temp\UnityBuilds\AssetBundles\exportablebundle";
#endif
#if WINDOWS_UWP
        Windows.Storage.StorageFolder objectsFolder = Windows.Storage.KnownFolders.Objects3D;
        Windows.Storage.StorageFile bundleFilePointer = await objectsFolder.GetFileAsync("exportablebundle");
        bundleFile = bundleFilePointer.Path;
#endif

        var myLoadedAB = AssetBundle.LoadFromFile(bundleFile);
        //instante bundle components from myLoadedAB//
    }

如您所见,这很简单。根据平台(我们已经使用该系统处理文本文件,png和其他文件),通过不同的方法找到了包路径,并且UNITY_EDITOR端正在运行。 WINDOWS_UWP仅在对AssetBundle.LoadFromFile(bundleFile);的调用上引发此错误:

Unable to open archive file: C:/Data/Users/edata/3D Objects/exportablebundle

(Filename: C:\buildslave\unity\build\Runtime/VirtualFileSystem/ArchiveFileSystem/ArchiveStorageReader.cpp Line: 542)


'Holoplan.exe' (CoreCLR: CoreCLR_UWP_Domain): Loaded 'C:\Data\Users\DefaultAccount\AppData\Local\DevelopmentFiles\HoloplanVS.Release_x86.jalfonso\System.Diagnostics.StackTrace.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
NullReferenceException: Object reference not set to an instance of an object.
at GameManager.<CallForBundles>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_0(Object state)
at UnityEngine.UnitySynchronizationContext.WorkRequest.Invoke()
at UnityEngine.UnitySynchronizationContext.Exec()
at UnityEngine.UnitySynchronizationContext.ExecuteTasks()
at UnityEngine.UnitySynchronizationContext.$Invoke1(Int64 instance, Int64* args)
at UnityEngine.Internal.$MethodUtility.InvokeMethod(Int64 instance, Int64* args, IntPtr method) 

(Filename: <Unknown> Line: 0)
  

“无法打开存档文件:C:/ Data / Users / edata / 3D对象/ exportablebundle”

似乎是与应用程序尝试使用错误的文件名或路径加载甚至在编辑器上运行时发生的错误相同的错误,因此由于某种原因'AssetBundle.LoadFromFile'找不到文件。我们在该行检查bundleFile,它包含正确的文件路径(“ C:\ Data \ Users \ edata \ 3D Objects \ exportablebundle”,其中“ exportablebundle”是捆绑文件的名称),因此我们猜想“ AssetBundle.LoadFromFile”具有从Hololens本地文件夹读取时出现问题,但是我们对如何解决这个问题并没有太多了解。

¿任何人都可以帮我们吗?

编辑-

我们正在使用Unity手册“资产捆绑包工作流程”中的示例代码构建资产捆绑包。就像这样:

static void BuildAllAssetBundles(){
  string assetBundleDirectory = "Assets/AssetBundles";
  if (!Directory.Exists(assetBundleDirectory)){
    Directory.CreateDirectory(assetBundleDirectory);
  }

  BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None,  BuildTarget.StandaloneWindows);
}

“ StandaloneWindows”作为构建目标似乎在​​可用列表中最接近hololens,因此我们去了。

1 个答案:

答案 0 :(得分:1)

抱歉,资产捆绑现在在HL设备中不起作用。这是一个必须解决的已知问题。