Unity3d无法生成Uri链接来启动dwonload assetbundle

问题描述 投票:0回答:1

问候,

最近,我正在为某些项目尝试Unity3d和Firebase。我设法从Firebase Storage下载图像,并尝试对Assetbundle执行相同操作。

但是当我开始下载时,它只是停在Debug.Log("download link generated");通常,在那之后它将给我Uri链接。我在图像下载现场再次测试了代码,它仍然可以工作。

[有人有没有经历过?还是我错过了一些需要准备资产捆绑下载的内容?

忘了,它仍然在同一个项目中。但是场景不同。

public void DownloadStarted()
    {
        StorageReference asset_ref = storage.GetReferenceFromUrl("gs://dummy_link.appspot.com/test_folder/Test_Asset/testbox");

        asset_ref.GetDownloadUrlAsync().ContinueWith((Task<Uri> task) =>
        {
            if (task.IsFaulted && task.IsCanceled)
            {
                Debug.Log(task.Exception.ToString());
            }
            else
            {
                Debug.Log("download link generated");
                Debug.Log("Download URL: " + task.Result);
                downloadLink = task.Result;
                _isDownload = true;

                StartCoroutine(DownloadAsset(task.Result));
            }
        });
    }

    IEnumerator DownloadAsset(Uri uri)
    {
        Debug.Log("Start Download");

        using (UnityWebRequest uwr = UnityWebRequestAssetBundle.GetAssetBundle(uri))
        {
            yield return uwr.SendWebRequest();

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

                AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(uwr);

                GameObject instance = Instantiate(bundle.LoadAsset("cube", typeof(GameObject)), gameObj.transform) as GameObject;
            }
        }
    }




firebase unity3d google-cloud-firestore
1个回答
0
投票

[ContinueWith可能在与Unity主线程不同的线程上执行。

Unity的大多数API仅在主线程中起作用。

在您的情况下,StartCoroutine可能会在线程中失败。


特别是对于Firebase,您应该在Unity中使用扩展名ContinueWithOnMainThread

ContinueWithOnMainThread
© www.soinside.com 2019 - 2024. All rights reserved.