有一个代码:
Dictionary<Rigidbody, float> cubes_ = new Dictionary<Rigidbody, float> ();
...
foreach( var cube in cubes_.Keys){
if (cube.gameObject.layer != LAYERS_AND_TAGS.D_2)
cube.AddForce ( -Physics.gravity * cube.mass );
else{
if (DCB.INSTANCE.DCC.IS_GROUNDED == false) {
cube.AddForce ( -Physics.gravity * cube.mass * cubes_[cube] );
cubes_[cube] = Mathf.Clamp01 ( cubes_[cube] + 5f * Time.fixedDeltaTime );
} else
cubes_[cube] = 0f;
}
}
cubes_ 包含 3 个对象。在 for cube 的第一个条目中包含 null,在第二个条目中来自 cubes_ 的第一个变量(通过 cube.AddForce (-Physics.gravity * cube.mass))
在第三遍中,第二个变量的结果是:cubes_[cube] = 0f; 就是这样,进一步的错误:
InvalidOperationException:不同步 System.Collections.Generic.Dictionary
2+Enumerator[UnityEngine.Rigidbody,System.Single].VerifyState () (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:912) System.Collections.Generic.Dictionary2+Enumerator[UnityEngine.Rigidbody,System.Single].MoveNext()(在 /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections .Generic/Dictionary.cs:835) System.Collections.Generic.Dictionary`2+KeyCollection+Enumerator[UnityEngine.Rigidbody,System.Single].MoveNext() (在 /Users/builduser/buildslave/mono/build/mcs/ class/corlib/System.Collections.Generic/Dictionary.cs:1028) Magnit.FixedUpdate()(在 Assets/Units/Rooms/P_3/Map/Scripts/Mag.cs:41)
错误的原因可能是什么?
它
与线相矛盾
好的。
您使用枚举器迭代字典的键。在循环内部,您更改了 key 对象的属性,这会更改其方法返回的值
GetHashCode。之后,您访问字典 - 根据更改的键设置值。这会导致您正在迭代的集合发生更改,这是不允许的。