无法将资产从Firebase存储加载到统一

我正在使用vuforia和unity创建增强现实应用程序。我已将我的Assetbundle上传到Firebase存储器中,我想检索保存在其中的3D模型并将其作为孩子加载到我的图像目标游戏对象上,但我无法检索它。我还安装了Firebase Unity SDK。

using Firebase;
using Firebase.Storage;
using System.Threading.Tasks;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using System;
using UnityEngine.Networking;
using UnityEngine.UI;

public class loadmodel2 : MonoBehaviour
{
    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());
            }
        });
    }

    IEnumerator Loadcoroutine()
    {
        string url = "gs://fit-union-221609.appspot.com/assettest1/myasset";
        WWW www = new WWW(url);
        while (!www.isDone)
            yield return null;
        AssetBundle myasset = www.assetBundle;

        GameObject mya1 = myasset.LoadAsset("Barbarian Variant") as GameObject;

        Instantiate(mya1).transform.parent = test.transform;
    }
}

无法将资产从Firebase存储加载到统一

我创建了一个名为“ myasset”的新资产捆绑并将其上传到Firebase存储中,并且还将3d模型的名称更改为“ BarbarianVariant”,从而删除了空间

无法将资产从Firebase存储加载到统一

无法将资产从Firebase存储加载到统一

无法将资产从Firebase存储加载到统一

在这里,我已经在主摄像机中启用了loadmodel2脚本,并为我分配了maincamera的测试游戏对象启用了脚本。您还可以在控制台中看到我得到的输出

happylady0001a 回答:无法将资产从Firebase存储加载到统一

首先,您的组件loadmodel2在检查器中被禁用,因此它的Start将永远不会被调用...


我不是Firebase专家,但您首先使用GetDownloadUrlAsync,然后无论如何都不会使用结果,而是开始使用新的UnityWebRequest从相同的参考URL下载结果。

您不是不想像这样使用从task.Result检索到的下载URL。

StartCoroutine(Loadcoroutine(task.Result));

...

IEnumerator Loadcoroutine(Uri uri)
{
    ...
}

然后注意 WWW(已过时!! = UnityWebRequest

您想做的可能是使用UnityWebRequestAssetBundle.GetAssetBundle(或在以前的版本UnityWebRequest.GetAssetBundle中)

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);

            // Make sure this path is correct! Afaik it should at least start with "Assets/..."
            var mya1 =  bundle.LoadAssetAsync<GameObject>("Barbarian Variant");
            yield return mya1;

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

通常,我也会避免在GameObject名称中使用空格。

本文链接:https://www.f2er.com/3079709.html

大家都在问