Как бороться с импортом активов после загрузки файла из интернета? - PullRequest
0 голосов
/ 18 сентября 2018

Я работаю над приложением для iOS, которое может загружать файлы .obj с сервера и показывать их.У меня проблема в том, что как только я скачал файл .obj, Unity начнет процесс импорта, который автоматически останавливает приложение. Есть ли способ избежать этого или дождаться его завершения, а затем загрузить файл?Я разрабатываю его для iOS

Ниже приведен код для загрузки и загрузки файла .obj:

IEnumerator DownloadAndLoadFile(string url) { 

var uwr = new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET);
string modelSavePath = Path.Combine(Application.dataPath, "Resources");
modelSavePath = Path.Combine(modelSavePath, docName); 

    if (!Directory.Exists(Path.GetDirectoryName(modelSavePath)))
    {
        Directory.CreateDirectory(Path.GetDirectoryName(modelSavePath));
    }

 var dh = new DownloadHandlerFile(modelSavePath);
 dh.removeFileOnAbort = true; 
 uwr.downloadHandler = dh;  

AsyncOperation request = uwr.SendWebRequest();
while (!request.isDone)
    { 
        Debug.Log("Progress: " + request.progress);
        yield return null;
    }  
 if(request.isDone){

     Debug.Log("File successfully downloaded and saved to " + modelSavePath);
          // Load Main scene
        Scene s = SceneManager.GetSceneByName("Main");
        if (s.isLoaded) {
                         var allObjects = Resources.FindObjectsOfTypeAll<MainAssetSwitch>(); 
                            if (allObjects.Length > 0) { 
                                var targetobject = allObjects [0];   
                                 targetobject.SetActive(true);
                                 Object prefabReference = Resources.Load(docName);
                                  GameObject gameObjectReference = Instantiate(prefabReference) as GameObject;
                                  ameObjectReference.transform.parent = targetobject.transform; 
                            } 
            }


 }

if (uwr.isNetworkError || uwr.isHttpError)
    {Debug.LogError(uwr.error);}

}

Вот что Unity будет запускаться автоматически после загрузки .objфайл загружен из интернета.enter image description here

Я также получил сообщение об ошибке «ArgumentException: объект, экземпляр которого вы хотите создать, равен нулю».из-за того, что ресурс не импортируется в файл ресурсов после завершения процесса загрузки.enter image description here

1 Ответ

0 голосов
/ 19 сентября 2018

Нет встроенных технологий для импорта моделей .obj или .fbx и добавления их на сцену во время выполнения в единстве.

Но вы можете использовать AssetBundles или найти некоторые ресурсы для этой цели.в AssetStore.

AssetBundle - это архивный файл, содержащий специфичные для платформы активы (модели, текстуры, префабы, аудиоклипы и даже целые сцены), которые можно загрузить во время выполнения.

Посмотрите на эти документы:

https://docs.unity3d.com/Manual/AssetBundlesIntro.html https://docs.unity3d.com/Manual/AssetBundles-Building.html https://docs.unity3d.com/Manual/LoadingResourcesatRuntime.html https://docs.unity3d.com/Manual/UnityWebRequest-DownloadingAssetBundle.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...