这是在 Unity 中。当我尝试删除已添加到此特定词典中的元素时,删除失败并且我不理解该行为。这是声明:private Dictionary<int, EnemyControler> remainingMobs = new Dictionary<int, EnemyControler>();在某些时候,我这样做:remainingMobs.Add(newEnemy.MobID, newEnemy);MobID 是一个 int 我每次创建一个新的敌人时都会增加当敌人死亡时,在他的 Destroy() 方法中,他调用:public void EnemyDied(int someID) { if(remainingMobs.Remove(someID)) { print("removed "+someID); } else { print("Failed to remove " + someID); DisplayRemainingMobs(); }}这是 DisplayRemainingMobs 方法:public void DisplayRemainingMobs() { string availableKeys=""; foreach (KeyValuePair<int, EnemyControler> pair in remainingMobs){ availableKeys+= pair.Key + ", "; } print(remainingMobs.Keys.Count + " are available : " + availableKeys);}这就是事情出错的地方。当我之前调用 DisplayRemainingMobs() 时,输出是:2 可用 : 1, 2,这完全符合预期。但是,当我杀死我产生的两个中的一个,并在字典上调用 .remove() 时,打印的输出变为:删除失败 20 可用:我不明白为什么 .remove() 失败,也不明白为什么失败后没有更多可用的密钥。我尝试了很多东西,包括将 int 交换为 string,认为它可能来自那里。我无法调试它,我打印的任何内容只告诉我它应该可以工作。在我的测试中,数字匹配。我什至制作了一个完整的功能,我在另一本专门为此制作的字典上使用所有这些功能,可以肯定的是,一切都按预期进行。我记得它可能来自于从方法调用 remove 的事实,但是我该如何解决呢?(显然因为声誉低而无法标记字典)
1 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
问题是你从来没有将敌人的wave
领域设置为 wavecontroller 对象。所以它试图从一个空的波控制器而不是实际的波控制器中移除敌人。实例化敌人时,将其波场设置为this
。
- 1 回答
- 0 关注
- 224 浏览
添加回答
举报
0/150
提交
取消