Мы создаем приложение 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//
}
Как вы видите, это очень просто.Мы находим путь пакета различными способами в зависимости от платформы (мы уже использовали эту систему для текстовых файлов, pngs и других), и сторона 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 Objects /exportablebundle "
, похоже, та же самая ошибка, которая возникает, когда приложение пытается загрузить файл с неправильным именем файла или путем, даже при работе в редакторе, поэтому по какой-то причине это выглядит так" AssetBundle.LoadFromFile 'не может найти файл de.Мы проверили файл bundleFile в этой строке, и он содержит правильный путь к файлу («C: \ Data \ Users \ edata \ 3D Objects \ exportablebundle», где «exportablebundle» - это имя файла пакета), поэтому мы предполагаем, что «AssetBundle.LoadFromFile» имеетпроблемы при чтении из локальной папки Hololens, но мы не очень понимаем, как решить эту проблему.
¿Кто-нибудь может нам помочь, пожалуйста?
EDIT-
Мы строим наш комплект ресурсов с примером кода из руководства Unity в разделе «Рабочий процесс комплекта активов».Похоже на это:
static void BuildAllAssetBundles(){
string assetBundleDirectory = "Assets/AssetBundles";
if (!Directory.Exists(assetBundleDirectory)){
Directory.CreateDirectory(assetBundleDirectory);
}
BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
}
'StandaloneWindows' как цель сборки кажется наиболее близкой к гололенам из доступного списка, поэтому мы пошли на это.