- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在创建一个多人游戏,其中包括具有不同值(例如健康、伤害)的不同英雄。我最初从数据库中获取这些值并将它们存储到一个结构中。
-> 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 ):
在您的情况下,最好的办法是为每个英雄提供某种 ID 并将其用作名称以从资源中加载它。
我还应该提到另外两件事:第一,除非您绝对知道自己在做什么,否则请始终使用类。您对问题的措辞表明您没有,因此请改用类(class)。更多阅读:Design guidelines from MSDN
第二,您的代码看起来像是来自 C++ 背景,并且您正在尝试以某种方式使用您现有的知识和在 Unity 中做事的旧方法。不。您真正应该做的是为每个英雄创建一个预制件并从资源中加载它们。
关于c# - Unity3D C# - 在结构/类中存储 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41851945/
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我试图用这种形式简单地获取数字 28 integer+space+integer+integer+space+integer我试过这个正则表达式 \\s\\d\\d\\s 但我得到了两个数字11 和
最近一直在学习D语言。我一直对运行时感到困惑。 从我能收集到的关于它的信息中,(这不是很多)我知道它是一种有助于 D 的一些特性的运行时。像垃圾收集一样,它与您自己的程序一起运行。但是既然 D 是编译
想问一下这两个正则表达式有区别吗? \d\d\d 与 \d{3} 我已经在我的本地机器上使用 Java 和 Windows 操作系统对此进行了测试,两者都工作正常并且结果相同。但是,当在 linux
我正在学习 Go,而且我坚持使用 Go 之旅(exercise-stringer.go:https://tour.golang.org/methods/7)。 这是一些代码: type IPAddr
我在Java正则表达式中发现了一段令我困惑的代码: Pattern.compile( "J.*\\d[0-35-9]-\\d\\d-\\d\\d" ); 要编译的字符串是: String string
我在 ruby 代码上偶然发现了这个。我知道\d{4})\/(\d\d)\/(\d\d)\/(.*)/是什么意思,但是\1-\2-\3-\4 是什么意思? 最佳答案 \1-\2-\3-\4 是 b
我一直在努力解决这个问题,这让我很恼火。我了解 D 运行时库。它是什么,它做什么。我也明白你可以在没有它的情况下编译 D 应用程序。就像 XoMB 所做的那样。好吧,XoMB 定义了自己的运行时,但是
我有两个列表列表,子列表代表路径。我想找到所有路径。 List> pathList1 List> pathList2 当然是天真的解决方案: List> result = new ArrayList>
我需要使用 Regex 格式化一个字符串,该字符串包含数字、字母 a-z 和 A-Z,同时还包含破折号和空格。 从用户输入我有02-219 8 53 24 输出应该是022 198 53 24 我正在
目标是达到与this C++ example相同的效果: 避免创建临时文件。我曾尝试将 C++ 示例翻译为 D,但没有成功。我也尝试过不同的方法。 import std.datetime : benc
tl;dr:你好吗perfect forwarding在 D? 该链接有一个很好的解释,但例如,假设我有这个方法: void foo(T)(in int a, out int b, ref int c
有什么方法可以在 D 中使用abstract auto 函数吗? 如果我声明一个类如下: class MyClass { abstract auto foo(); } 我收到以下错误: mai
有没有人为内存中重叠的数组切片实现交集?算法在没有重叠时返回 []。 当 pretty-print (使用重叠缩进)内存中重叠的数组切片时,我想要这个。 最佳答案 如果您确定它们是数组,那么只需取 p
我已经开始学习 D,但我在使用 Andrei Alexandrescu 所著的 The D Programming Language 一书中提供的示例时遇到了一些麻烦。由于 int 和 ulong 类
如何创建一个不可变的类? 我的目标是创建一个实例始终不可变的类。现在我只是用不可变的方法和构造函数创建了一个“可变”类。我将其称为 mData,m 表示可变。然后我创建一个别名 alias immut
不久前我买了《The D Programming Language》。好书,很有教育意义。但是,我在尝试编译书中列出的语言功能时遇到了麻烦:扩展函数。 在这本书中,Andrei 写了任何可以像这样调用
我在 D http://www.digitalmars.com/d/2.0/lazy-evaluation.html 中找到了函数参数的惰性求值示例 我想知道如何在 D 中实现可能的无限数据结构,就像
这个问题在这里已经有了答案: 12 年前关闭。 Possible Duplicate: Could anyone explain these undefined behaviors (i = i++
当前是否可以跨模块扫描/查询/迭代具有某些属性的所有函数(或类)? 例如: source/packageA/something.d: @sillyWalk(10) void doSomething()
我是一名优秀的程序员,十分优秀!