Использование пакетов ресурсов Unity 3d в Hololens из папок устройства

Мы создаем приложение 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)

"Unable to open archive file: C:/Data/Users/edata/3D Objects/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 из доступного списка, поэтому мы пошли на это.

Попробуйте использовать обратную косую черту в пути.

shingo 28.05.2019 14:18

Совместим ли пакет активов с UWP? Я не уверен, но вам может понадобиться правильное окончание файла? Как создавался бандл?

derHugo 28.05.2019 15:05

@derHugo найдите разъяснение в исходном сообщении под заголовком «EDIT».

Eldir 28.05.2019 17:25

HoloLens — это WSAPlayer (WSA означает приложение для Магазина Windows). Попробуйте использовать его вместо этого и посмотрите, поможет ли это.

derHugo 28.05.2019 17:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
512
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

К сожалению, в настоящее время объединение ресурсов не работает на устройствах HL. Это известная проблема, которая должна быть исправлена.

Другие вопросы по теме