Я создаю приложение 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.