我正在使用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;
}
}
我创建了一个名为“ myasset”的新资产捆绑并将其上传到Firebase存储中,并且还将3d模型的名称更改为“ BarbarianVariant”,从而删除了空间
在这里,我已经在主摄像机中启用了loadmodel2脚本,并为我分配了maincamera的测试游戏对象启用了脚本。您还可以在控制台中看到我得到的输出
答案 0 :(得分:1)
首先,您的组件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
名称中使用空格。