gpt4 book ai didi

c# - Unity3D C# - 在结构/类中存储 Sprite ?

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:34 24 4
gpt4 key购买 nike

我正在创建一个多人游戏,其中包括具有不同值(例如健康、伤害)的不同英雄。我最初从数据库中获取这些值并将它们存储到一个结构中。

-> I have little to no knowledge about structs 
-> and got told this is probably a performance loss / bad approach

值存储在结构中并创建字典(int,my-struct)以获取值之前工作得很好。

我已经到了要为每个英雄在此结构中存储特定 Sprite 的地步。我考虑通过 Resources.Load 获取这些 Sprite (我想这是最简单的方法)

public struct data
{
public string Name;
public int ID, hp, dmg, range, magazin;
public float tbtwb, rltime;
public Sprite heroSprite; //Structs don't seem to like Unity's sprite type
}

public Dictionary<int, data>_HeroDict;

这就是我提供结构并将条目添加到字典中的方式。

while (rdr.Read())
{
//Store it into the Dictionary
data itm = new data();

itm.Name = rdr["Name"].ToString();
itm.ID = int.Parse (rdr["ID"].ToString());
itm.hp = int.Parse (rdr["Hp"].ToString());
itm.dmg = int.Parse (rdr["Dmg"].ToString());
itm.magazin = int.Parse (rdr["Magazin"].ToString());
itm.range = int.Parse (rdr["Range"].ToString());
itm.tbtwb = float.Parse(rdr["Tbtwb"].ToString());
itm.rltime = float.Parse(rdr["Rltime"].ToString());

//What I thought of:
itm.heroSprite = Resources.Load ("Sprites/Sprite1", typeof(Sprite)) as Sprite;

_HeroDict.Add(itm.ID, itm);
}

我的问题:我无法将 sprite 存储在结构中,也不知道解决方法。

有人告诉我可以/应该使用类而不是结构,但我也不知道为什么不能存储 Sprite。

你能给我指出正确的方向并给我一个示例方法吗?

提前致谢,Csharpest

最佳答案

您不能在结构或类中存储 Sprite 。 Sprite 是 Unity 内部的一个类。您可以存储的是对 Sprite 的引用,这正是您声明时发生的事情

Sprite sprite = whatever()

了解 Sprite 是如何存储的也很重要。 Sprite 是一种 Assets 。构建游戏时,Unity 将 Assets 序列化为包。当您导入一个 Sprite 时,Unity 会施展魔法,然后将其返回给您,就像您导入它时一样。这就是为什么你不能在你的代码/自定义文件/任何东西中存储 Sprite 。即使您确实找到了某种方法来做到这一点,这样做也是非常不合适的,因为 Unity 会执行许多您不知道的优化。

有了这些知识,您可以从 Unity 的 Assets 数据库中检索 Sprite (或任何 Assets ):

  1. 在您的一个单一行为类中声明一个公共(public)变量,并在编辑器中分配引用。
  2. 将您的 Assets 存储在 Resources 文件夹中,并使用 Resources.Load 按名称查找和加载它。

在您的情况下,最好的办法是为每个英雄提供某种 ID 并将其用作名称以从资源中加载它。

我还应该提到另外两件事:第一,除非您绝对知道自己在做什么,否则请始终使用类。您对问题的措辞表明您没有,因此请改用类(class)。更多阅读:Design guidelines from MSDN

第二,您的代码看起来像是来自 C++ 背景,并且您正在尝试以某种方式使用您现有的知识和在 Unity 中做事的旧方法。不。您真正应该做的是为每个英雄创建一个预制件并从资源中加载它们。

关于c# - Unity3D C# - 在结构/类中存储 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41851945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com