问候,
最近,我正在为某些项目尝试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;
}
}
}
[ContinueWith
可能在与Unity主线程不同的线程上执行。
Unity的大多数API仅在主线程中起作用。
在您的情况下,StartCoroutine
可能会在线程中失败。
特别是对于Firebase,您应该在Unity中使用扩展名ContinueWithOnMainThread
ContinueWithOnMainThread