【发布时间】:2013-12-05 07:08:45
【问题描述】:
涉及的敌人类别:
public abstract Enemy : MonoBehaviour {}
public class A : Enemy {}
public class B : Enemy {}
我有一本字典。我想让字典为每种类型的敌人包含一个堆栈。
public class Test : MonoBehaviour
{
// prefabs
public GameObject a, b;
public Dictionary<Enemy, Stack> eDictionary;
void Start()
{
eDictionary = new Dictionary<Enemy, Stack>();
Fill(a, 10);
Fill(b, 10);
}
}
我如何制作堆栈和键。
public void Fill(Enemy e, int howMany)
{
Stack s = new Stack();
for(int I = 0; I < howMany; I++)
{
GameObject g = MonoBehavior.Instantiate(e.gameObject) as GameObject;
s.Push(g);
}
eDictionary.Add(e, s)
}
主要问题是:如何制作钥匙,使 A 类敌人与 1 个钥匙堆叠在一起?
当我进入generalized 敌人类 A 和 B 并尝试将该敌人添加到相应的堆栈中时,由于其键,我得到键不匹配错误。当我将敌人从堆栈中弹出时,我会这样做,然后当我完成它们时,我想将它们推入字典的堆栈中(此时它会失败)。
【问题讨论】:
-
为什么不使用
Stack<Enemy>? -
我会有不同的敌人。所以我想为每一种敌人准备一个堆栈。除非您的意思是为字典中的 Stack 提供一个类型,否则在这种情况下不需要它。
-
@MikeJohn 似乎您将
Enemy类型与Enemy的instances 类型混淆了。尝试使用字符串或枚举(例如enum EnemyType)代替键。或者也许可以使用typeof(Enenemy)作为键。
标签: c# dictionary stack unity3d