Unity3D WebGL: я пытаюсь загрузить AssetBundle, но получаю сообщение «Невозможно открыть архивный файл» - PullRequest
0 голосов
/ 29 марта 2019

Я создаю приложение unity3d-webgl, которое использует пакеты ресурсов для загрузки 3d-моделей.Пока я не могу загрузить ни один из пакетов ресурсов, все, что я вижу в окне консоли моего браузера: «Невозможно открыть архивный файл: http://192.168.1.106/webgl/StreamingAssets/Wheels/tis"

Я использую Unity 2018.3, и у меня работает отдельный сервер LinuxUbuntu (так что нет локального хоста), я также протестировал сборку в Firefox, Chrome и Edge, но я получаю одинаковую ошибку во всех браузерах. Я даже сделал сборку для разработчика, и она выдала только одно и то же сообщение об ошибке, безЛюбое другое объяснение.

using UnityEngine;
using UnityEngine.Events;
using System.Collections;

public class AssetLoader : MonoBehaviour
{
    public GameResources m_resources;
    public WheelPrep m_wheelPrep;
    [Space(10)]
    public string m_extension = ".asset";
    [Space(10)]
    public GameObject m_wheelHolder;
    [Space(10)]
    public LoaderStartingEvent m_LoadStartingEvent;
    public LoaderCompleteEvent m_LoadCompleteEvent;
    public LoadProgressEvent m_ProgressEvent;

    private AssetBundle m_aBundle;

    public void LoadAsset(string manufacturer, string model)
    {
        StartCoroutine(LoadAssets(manufacturer, model));
    }

    IEnumerator LoadAssets(string manufacturer, string model)
    {
        foreach (Manufacturer man in m_resources.manufacturers.manufacturers)
        {
            // find the correct manufacturer
            if (man.fileName == manufacturer)
            {
                // send event that manufacturer asset loading has begun
                m_LoadStartingEvent.Invoke();

                if (m_aBundle == null || m_aBundle.name != man.fileName)
                {

                    // load manufacturer assets
#if UNITY_WEBGL
                    m_aBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + '/' + man.filePath + '/' + man.fileName + m_extension);
#else
                    AssetBundleCreateRequest bundleLoadRequest = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + '/' + man.filePath + '/' + man.fileName + m_extension);

                    // loading progress for asset data
                    while (!bundleLoadRequest.isDone)
                    {
                        m_ProgressEvent.Invoke(bundleLoadRequest.progress + 0.1f);
                        yield return null;
                    }

                    yield return bundleLoadRequest;

                    m_aBundle = bundleLoadRequest.assetBundle;
#endif
                }

                foreach (Wheel w in man.wheels)
                {
                    // find the wheel made by the manufacturer
                    if (w.fileName == model)
                    {
                        if (m_resources.m_currentWheel == w)
                            break;

                        m_resources.m_currentWheel = w;

                        AssetBundleRequest assetLoadRequest = m_aBundle.LoadAssetAsync<GameObject>(w.fileName);
                        yield return assetLoadRequest;

                        // remove old wheel from scene
                        if (m_wheelHolder.transform.childCount > 0)
                            foreach (Transform t in m_wheelHolder.transform)
                                GameObject.Destroy(t.gameObject);

                        // place wheel in scene
                        GameObject instance = Instantiate((GameObject)assetLoadRequest.asset);
                        instance.name = instance.name.Replace("(Clone)", string.Empty);

                        instance.transform.parent = m_wheelHolder.transform;
                        instance.transform.localPosition = new Vector3(0, 0, 0);

                        m_wheelPrep.Setup();
                    }
                }

                // all assets loaded...
                m_LoadCompleteEvent.Invoke();
            }
        }
    }
}

[System.Serializable]
public class LoaderStartingEvent : UnityEvent { }

[System.Serializable]
public class LoaderCompleteEvent : UnityEvent { }

[System.Serializable]
public class LoadProgressEvent : UnityEvent<float> { }

Я следовал руководству по единству для создания ресурсов для автономного WebGL против Windows. Когда я строю проект для окон в одиночку и использую автономный пакет активов, все работает отлично. Я получаю толькопроблема в webgl.

Примечание: изначально я думал, что для файла требуется расширение файла, поэтому существует переменная с именем m_extension. Добавление расширения ничего не сделало, хотя код и есть, переменная пустав редакторе Unity.

...