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