c# - 如何从字节数组制作精灵?
问题描述
我有一个 Unity 游戏,玩家在开始游戏后从数据库中获取库存。我得到了存储在 Firebase Storage 中的项目的图片,我可以下载它们。但是,我不知道如何从我通过下载获得的 byte[] (fileContents) 制作精灵。(稍后我会将这些精灵加载到玩家的库存中)
我得到了以下 C# 脚本:
private void getPlayersInventory()
{
FirebaseDatabase.DefaultInstance.GetReference("users").Child(auth.CurrentUser.UserId)
.Child("inventory").GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
print("unable to get snapshot for the inventory");
}
else if (task.IsCompleted)
{
snapshot = task.Result;
if(snapshot.HasChildren)
{
foreach(var current in snapshot.Children)
{
string currentName = current.Value.ToString();
print(currentName.ToLower() + ".png");
const long maxAllowedSize = 10 * 1024 * 1024;
storageReference.Child(currentName.ToLower() + ".png")
.GetBytesAsync(maxAllowedSize)
.ContinueWith((Task<byte[]> task_) =>
{
if (task_.IsFaulted || task_.IsCanceled)
{
Debug.Log(task_.Exception.ToString());
}
else
{
byte[] fileContents = task_.Result;
Debug.Log("Finished downloading!");
}
});
}
}
}
});
}
解决方案
我相信您正在寻找ImageConversion.LoadImage
您的完整代码将类似于:
var tex = new Texture(1,1); // note that the size is overridden
tex.LoadImage(task_.Result);
var sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(tex.width/2, tex.height/2));
如果这是您的最终目标,您还可以在运行时打包纹理。一旦你通过tex.LoadImage
大块,你应该能够锻炼Texture2D.PackTextures
。
——帕特里克
推荐阅读
- python-3.x - 给定 2 个日期时间的 python 获取 24:00 - 06:00 之间的小时数
- html - CSS flex-item align self 不适用于 flex-wrap 父级
- c# - 解决迷宫 c#
- c# - 将 WMI 结果绑定到 datagridview
- windows - Git命令Windows 10慢
- php - 无法通过 PHP 代码将多个图像上传到 SQL 数据库
- python - Python:如果列 Y 的值在可能值的列表 L 中,则更新列 X 值
- r - 如何在 R 中使用 ggplot2 将多个图表示为两组图的成员
- c# - 在 N 层应用程序 UI 中使用 async & await(C#) 到 DB 访问层的有效方法是什么?
- iis - 保护 ASP.NET C# Web.config 中的敏感信息