问题描述
我现在正在为Unity和Firebase Storage苦苦挣扎。我想获取存储在Firebase存储中的图像,将其设置为纹理,然后将纹理指定为材质。但是,红色的问号像图片一样出现在场景中。我试图找到解决方案,但找不到。这是我的代码。
public class TestScript : MonoBehavIoUr
{
public GameObject plane;
public Material testMaterial;
private void Start()
{
// Get a reference to the storage service,using the default Firebase App
Firebase.Storage.FirebaseStorage storage = Firebase.Storage.FirebaseStorage.DefaultInstance;
Firebase.Storage.StorageReference storage_ref = storage.GetReferenceFromUrl("removed for question");
byte[] fileContents = null;
storage_ref.Child("redHeart.png").GetBytesAsync(1024 * 1024)
.ContinueWith((Task<byte[]> task) =>
{
if (task.IsFaulted || task.IsCanceled)
{
Debug.Log(task.Exception.ToString());
}
else
{
fileContents = task.Result;
}
});
Texture2D texture = new Texture2D(1024,1024);
texture.LoadImage(fileContents);
testMaterial.SetTexture("_MainTex",texture);
plane.GetComponent<Renderer>().sharedMaterial = testMaterial;
Debug.Log("finished");
}
}
解决方法
据我了解您的问题,我想回答。
我认为加载图片后运行的异步功能可能存在问题。
试试这个。存储后,即可显示它。
像这样的东西
Firebase.Storage.FirebaseStorage storage = Firebase.Storage.FirebaseStorage.DefaultInstance;
Firebase.Storage.StorageReference storage_ref = storage.GetReferenceFromUrl("removed for question");
storage_ref.Child("redHeart.png").GetBytesAsync(1024 * 1024)
.ContinueWith((Task<byte[]> task) =>
{
if (task.IsFaulted || task.IsCanceled)
{
Debug.Log(task.Exception.ToString());
}
else
{
byte[] fileContents = task.Result;
Debug.Log("Load Image after getting result!");
Texture2D texture = new Texture2D(1024,1024);
texture.LoadImage(fileContents);
testMaterial.SetTexture("_MainTex",texture);
plane.GetComponent<Renderer>().sharedMaterial = testMaterial;
Debug.Log("finished");
}
});