Есть код:
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: out of sync
System.Collections.Generic.Dictionary2+Enumerator[UnityEngine.Rigidbody,System.Single].VerifyState
() (at
/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:912)
System.Collections.Generic.Dictionary
2+Enumerator[UnityEngine.Rigidbody,System.Single].MoveNext
() (at
/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
() (at
/Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:1028)
Magnit.FixedUpdate () (at
Assets/Units/Rooms/P_3/Maп/Scripts/Mag.cs:41)
В чем может быть причина ошибки?
Это
При первом заходе в for cube содержит null,
противоречит строчке
if (cube.gameObject.layer ...
Ну ладно.
Вы итерируете по ключам словаря, используя энумератор. Внутри цикла Вы меняете свойство объекта-ключа, что приводит к изменению значения, возвращаемого его методом GetHashCode
. После этого Вы обращаетесь к словарю - устанавливаете значение по изменившемуся ключу. Это приводит к изменению коллекции, по которй Вы итерируете, что не допускается.
foreach(var cube in new List<Rigidbody>(cubes_.Keys)){
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не могу отыскать компилятор в JetBrains RiderПрошу указать путь к папке в которой он находится
Создаю проект за проектом и вот этоЕррор за еррором
Необходимо реализовать программу Которая рассчитывает например окружность, трапецию и параболу