在我的项目中,我得到了两个场景' Opening' '主&#39 ;.
如果在一段时间内没有完成任务或完成任务, 它将返回Opening场景并可以重新开始。
它有用,去开场景 - >主场景
并转到主场景 - >开幕式
然而'主要场景 - >开幕式#39;当我再次尝试去主场景时, 它显示了那些错误。
ArgumentException:字典中已存在具有相同键的元素。
System.Collections.Generic.Dictionary 2[System.Int32,System.Collections.Generic.Dictionary
2 [KeyDelayData + Delay,UnityEngine.Sprite]]。添加(Int32键,System.Collections.Generic.Dictionary`2值)(在/ Users / builduser / buildslave / mono /build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:404)
Note.Init()(在Assets / Scripts / Music / Note.cs:22)
ManagerChat.Awake()(在Assets / Scripts / Chatting / ManagerChat.cs:315)
ArgumentException:字典中已存在具有相同键的元素。 System.Collections.Generic.Dictionary`2 [System.Int32,UnityEngine.AudioClip] .Add(Int32 key,UnityEngine.AudioClip value)(at / Users / builduser / buildslave / mono / build / mcs / class / corlib / System。 Collections.Generic / Dictionary.cs:404) SoundManager.Awake()(在Assets / Scripts / Music / SoundManager.cs:16)
对我来说,这看起来像是一个重置变量问题,但我不知道它的含义 我该怎么做才能解决这个问题?
答案 0 :(得分:1)
您正在尝试向Dictionary
添加退出键。
来自 315 行上Awake
脚本的ManagerChat
函数中的第一个错误。
来自 16 行上Awake
脚本的SoundManager
函数中的第二个错误。
解决方案:
1 。Dictionary.Clear()
应该这样做,但是如果您不想清除它们,请在添加Dictionary
之前检查该密钥是否已经在Dictionary.Add
中{1}}功能:
让我们说这是你的代码:
Dictionary<int, Sprite> imageDict = new Dictionary<int, Sprite>();
int keyToAdd = 1;
imageDict.Add(keyToAdd, new Sprite());
将其更改为:
Dictionary<int, Sprite> imageDict = new Dictionary<int, Sprite>();
int keyToAdd = 1;
//Add only if key does not exist
if (!imageDict.ContainsKey(keyToAdd))
{
imageDict.Add(keyToAdd, new Sprite());
}
2 。另一种方法是使用索引([]
)作为更改密钥。这样做不涉及Dictionary.Add
函数。
Dictionary<int, Sprite> imageDict = new Dictionary<int, Sprite>();
int keyToAdd = 1;
imageDict.Add(keyToAdd, new Sprite());
应该是:
Dictionary<int, Sprite> imageDict = new Dictionary<int, Sprite>();
int keyToAdd = 1;
imageDict[keyToAdd] = new Sprite();
答案 1 :(得分:0)
我通过使用DictionaryValue.Clear()修复了两者;
这是关于我认为的遗留对象和精灵。