富文本导致FairyBatching数组越界报错的问题

我制作了一个包含富文本的界面,且富文本的自动大小方式为自动收缩,在打开该界面时同时启动了FairyBatching,报错数组越界。具体定位到在报错方法中遍历Children时,是提前取出Children的count作为循环条件,但在循环体内的child.GetBounds()方法中,会走到RichTextField的EnsureSizeCorrect()方法,该方法里的Cleanup()方法会导致父级的Children数量减少,但由于对Children的遍历是提前取出了数量作为循环条件,因此循环任然在继续,但Children已经没有了。
报错信息如下:
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
System.Collections.Generic.List`1[T].get_Item (System.Int32 index) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
FairyGUI.Container.CollectChildren (FairyGUI.Container initiator, System.Boolean outlineChanged) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:945)
FairyGUI.Container.CollectChildren (FairyGUI.Container initiator, System.Boolean outlineChanged) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:970)
FairyGUI.Container.CollectChildren (FairyGUI.Container initiator, System.Boolean outlineChanged) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:970)
FairyGUI.Container.CollectChildren (FairyGUI.Container initiator, System.Boolean outlineChanged) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:970)
FairyGUI.Container.DoFairyBatching () (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:882)
FairyGUI.Container.CollectChildren (FairyGUI.Container initiator, System.Boolean outlineChanged) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:967)
FairyGUI.Container.CollectChildren (FairyGUI.Container initiator, System.Boolean outlineChanged) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:970)
FairyGUI.Container.DoFairyBatching () (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:882)
FairyGUI.Container.SetRenderingOrder (FairyGUI.UpdateContext context) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:851)
FairyGUI.Container.Update (FairyGUI.UpdateContext context) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:828)
FairyGUI.Container.Update (FairyGUI.UpdateContext context) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:814)
FairyGUI.Container.Update (FairyGUI.UpdateContext context) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:814)
FairyGUI.Container.Update (FairyGUI.UpdateContext context) (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Container.cs:814)
FairyGUI.Stage.InternalUpdate () (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/Stage.cs:768)
FairyGUI.StageEngine.LateUpdate () (at Assets/3rd/FairyGUI/Runtime/Scripts/Core/StageEngine.cs:22)
 
已邀请:

谷主

赞同来自: zhzh123bish

实际在doFairyBatching之前富文本就会执行update,所以_textChanged不会为true,也就不会在doFairyBatching里进入到BuildLines。你有没有在container.onUpdate里写逻辑,或者其他特别的逻辑?

zhzh123bish

赞同来自:

如果在遍历过程中,Children是可能变化,那遍历过程逻辑是不是应该修改一下

要回复问题请先登录注册