Android 无法将三维模型从firebase存储下载并实例化到unity

Android 无法将三维模型从firebase存储下载并实例化到unity,android,firebase,unity3d,firebase-storage,vuforia,Android,Firebase,Unity3d,Firebase Storage,Vuforia,我已将我的3d模型放入assetbundle中,并将其存储在firebase存储中。当应用程序运行时,我希望从firebase加载3d模型,并希望3d模型是主摄像头的子对象。但不幸的是,它无法工作。当我运行应用程序时,我从控制台中的debug.log获取存储参考url,但没有下载任何内容还调试了代码,未发现任何错误。这是我最后一年的项目,请提供任何帮助 using Firebase.Storage; using System.Threading.Tasks; using System.Colle

我已将我的3d模型放入assetbundle中,并将其存储在firebase存储中。当应用程序运行时,我希望从firebase加载3d模型,并希望3d模型是主摄像头的子对象。但不幸的是,它无法工作。当我运行应用程序时,我从控制台中的debug.log获取存储参考url,但没有下载任何内容还调试了代码,未发现任何错误。这是我最后一年的项目,请提供任何帮助

using Firebase.Storage;
using System.Threading.Tasks;
using System.Collections;
using UnityEngine;
using System;
using UnityEngine.Networking;

public class Loadmodel2 : MonoBehaviour
{
// Start is called before the first frame update
public GameObject test;



void Start()
{
    FirebaseStorage storage = FirebaseStorage.DefaultInstance;

    Firebase.Storage.StorageReference reference =
    storage.GetReferenceFromUrl("gs://fit-union-221609.appspot.com/assettest1/myasset");

    reference.GetDownloadUrlAsync().ContinueWith((Task<Uri> task) => {
        if (!task.IsFaulted && !task.IsCanceled)
        {
            Debug.Log("Download URL: " + task.Result);

            // ... now download the file via WWW or UnityWebRequest.
            StartCoroutine(Loadcoroutine(task.Result));

        }
    });

}



IEnumerator Loadcoroutine(Uri uri)
{

    using (var www = UnityWebRequestAssetBundle.GetAssetBundle(uri))
    {
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);


        }
        else
        {

            AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(www);

            var mya1 = bundle.LoadAssetAsync<GameObject>("BarbarianVariant");
            yield return mya1;

            var obj = Instantiate((GameObject)mya1.asset);
            obj.transform.parent = test.transform;


        }
    }


}
}
使用Firebase.Storage;
使用System.Threading.Tasks;
使用系统集合;
使用UnityEngine;
使用制度;
使用UnityEngine。联网;
公共类Loadmodel2:单行为
{
//在第一帧更新之前调用Start
公开游戏对象测试;
void Start()
{
FirebaseStorage=FirebaseStorage.DefaultInstance;
Firebase.Storage.StorageReference参考=
storage.GetReferenceFromUrl(“gs://fit-union-221609.appspot.com/assettest1/myasset”);
reference.GetDownloadUrlAsync().ContinueWith((任务)=>{
如果(!task.IsFaulted&&!task.IsCanceled)
{
Log(“下载URL:+task.Result”);
//…现在通过WWW或UnityWebRequest下载该文件。
start例程(Loadcoroutine(task.Result));
}
});
}
IEnumerator Loadcoroutine(Uri)
{
使用(var www=UnityWebRequestAssetBundle.GetAssetBundle(uri))
{
返回www.SendWebRequest();
如果(www.isNetworkError | | www.isHttpError)
{
Debug.Log(www.error);
}
其他的
{
AssetBundle bundle=DownloadHandlerAssetBundle.GetContent(www);
var mya1=bundle.LoadAssetAsync(“Barbarian变体”);
收益率mya1;
var obj=实例化((游戏对象)mya1.asset);
obj.transform.parent=test.transform;
}
}
}
}
这就是我想要实现的目标


根据谷歌的文档:

您的文件存储在谷歌云存储桶中。此存储桶中的文件以层次结构显示,就像本地硬盘上的文件系统或Firebase实时数据库中的数据一样。通过创建对文件的引用,您的应用程序可以访问该文件。然后可以使用这些引用上载或下载数据、获取或更新元数据或删除文件。引用可以指向特定文件,也可以指向层次结构中更高级别的节点

引用“gs://fit-union-221609.appspot.com/assettest1/myasset”的代码似乎没有引用分层云存储桶。考虑更改为HTTPS引用,或者从您的谷歌控制台获取正式的GS层次结构。< /P> 此外,资产包通常有一个文件扩展名,您应该将其包含在URI中


更新
在我进一步理解之后,看起来gs URL是正确的。但是,从屏幕截图上看,游戏对象似乎未启用。这可能就是问题所在。

谷歌云存储位置是“gs://fit-union-221609.appspot.com/assettest1/myasset”吗?gs://仅适用于谷歌存储。那么我应该怎么做。我遵循了此文档,您似乎可以使用它。如何将其更改为https引用,以及正式的gs层次结构是什么?您的文件存储在谷歌存储桶中,对吗@malithpriyashani层次结构只是“gs:///”,对于你来说,我猜“gs://assettet1/myasset”@malithpriyashani为你的谷歌存储桶截图,请@malithpriyashani更新我的参考存储。GetReferenceFromUrl(“gs://assett1/myasset”);但在我这样做之后,会出现两个错误:1)无法从URL gs://assettest1/myasset创建StorageReference。URL指定与此实例(fit-union-221609.appspot.com)不同的存储桶(assettest1)2)ArgumentException:URL gs://assettest1/myasset与存储URL gs://fit-union-221609.appspot.com不匹配