在场景中2d背景icon
的显示是使用绑定的方式,在m4uscrollviewBinding
中是检测
Scene2DUnitIcons
属性以及时实现更新的。更新的逻辑是放到Update()
函数中的。
对Scene2DUnitIcons
属性的处理是放在协程中进行的,原来的代码是:
SceneUnitIcon icon = new SceneUnitIcon(index, unit.id, (int)unit.sceneType, unit.customType, unit.sceneName, www.texture,unit.path);
icon.onIconClickedCallback = OnClick2DSceneUnitIcon;
icon.onDeleteBtnClickedCallback = OnDeleteSceneUnit;
icon.onShowOptionBtnCallback = OnShowSceneUnitOption;
icon.onHideOptionBtnCallback = OnHideSceneUnitOption;
Scene2DUnitIcons.Add(icon);
Scene2DUnitIcons = SceneUnitSort(Scene2DUnitIcons);
当icon
初始化之后便立刻添加到Scene2DUnitIcons
列表中,这样在m4uscrollviewbinding
中的update
方法中立刻就能检测到其变化那么就会立即执行生成图表界面icon。而后面的排序方法根本就没有执行,导致排序出现错乱。
根本原因是因为协程中的代码与update
时间函数中的代码并行执行的原因。
修改后的方法为:
SceneUnitIcon icon = new SceneUnitIcon(index, unit.id, (int)unit.sceneType, unit.customType, unit.sceneName, www.texture,unit.path);
icon.onIconClickedCallback = OnClick2DSceneUnitIcon;
icon.onDeleteBtnClickedCallback = OnDeleteSceneUnit;
icon.onShowOptionBtnCallback = OnShowSceneUnitOption;
icon.onHideOptionBtnCallback = OnHideSceneUnitOption;
temp = Scene2DUnitIcons;
temp.Add(icon);
Scene2DUnitIcons = SceneUnitSort(temp);```
这样使得在排序算法执行完之前`Scene2DUnitIcons`列表不发生变化,那么就不会触发`m4uscrollviewbinding`中的方法了