【问题标题】:cant download and instantiate 3d model from firebase storage to unity无法将 3d 模型从 firebase 存储下载并实例化到统一
【发布时间】:2019-11-25 15:41:11
【问题描述】:

我已将我的 3d 模型放在一个资产包中并将其存储在 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;


        }
    }


}
}

这就是我想要实现的目标

【问题讨论】:

标签: android firebase unity3d firebase-storage vuforia


【解决方案1】:

根据谷歌的文档:

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

您引用“gs://fit-union-221609.appspot.com/assettest1/myasset”的代码似乎并未引用分层云存储桶。考虑更改为 HTTPS 引用,或从您的 google 控制台获取正式的 gs 层次结构。

此外,资产包通常具有文件扩展名,您应该将其包含在 URI 中。


更新

经过我的进一步了解,看起来 gs URL 是正确的。但是,查看屏幕截图似乎未启用游戏对象。这可能就是问题所在。

【讨论】:

  • 如何将其更改为 https 引用以及正式的 gs 层次结构是什么
  • 您的文件存储在谷歌存储桶中,对吗? @malithpriyashan
  • 层次结构只是“gs:////”,对你来说我猜是“gs://assettest1/myasset”@ malithpriyashan
  • 请为您的谷歌存储桶截图@malithpriyashan
  • 我更新了我的参考存储。GetReferenceFromUrl("gs://assettest1/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 不匹配。 apppot.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多