Unity3D C# - Store sprites in struct/class?
我正在创建一个多人游戏,包括不同价值观(如健康,伤害)的不同英雄。我最初从数据库中获取这些值并将它们存储到结构中。
1 2 | -> I have little to no knowledge about structs -> and got told this is probably a performance loss / bad approach |
将值存储在结构中并创建字典(int,my struct),以获得以前运行良好的值。
我已经到了我想要为这个结构中的每个英雄存储特定精灵的地步。我考虑通过resources.load获取这些精灵(我猜这是最简单的方法)
1 2 3 4 5 6 7 8 9 | 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; |
这就是我如何向结构馈送数据并向字典中添加条目的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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,不知道为什么。
你能给我指出正确的方向并给我一个例子吗?
事先谢谢,CSharpest
不能将sprite存储在结构或类中。精灵是统一的内在阶级。您可以存储的是对sprite的引用,当您声明
1 | Sprite sprite = whatever() |
了解精灵是如何储存的也很重要。精灵是一种资产。当你的游戏建立时,资产被统一序列化成包。当你导入一个精灵时,Unity会施展一些魔法,然后像导入精灵时一样将它还给你。这就是为什么你不能在你的代码/自定义文件/任何东西中存储sprite。即使您确实找到了一些方法来做这件事,也非常不适合这样做,因为Unity执行了许多您不知道的优化。
有了这些知识,您可以从Unity的资产数据库中检索精灵(或任何资产)的方法是:
在您的例子中,您最好给每个英雄一些ID,并使用它作为名称从资源中加载它。
我还应该提到另外两件事:一,总是使用类,除非你完全知道你在做什么。你回答问题的方式表明你没有,所以用一个类来代替。更多阅读:来自msdn的设计指南
第二,你的代码看起来像是来自C++背景,你试图用你现有的知识和旧的方法在Unity内部做事情。不要这样做。你真正应该做的是为每个英雄创建一个序言,并从资源中加载它们。