ArgumentException: Getting control 0's position in a group with only 0 controls when doing repaint

最近在写编辑器的时候时长会遇到这个问题,后来查了下资料,研究了一下。这里提供一种解决思路给大家:

因为我加了搜索Search功能,那必然用到`private void HandleEvents()
{
Event e = Event.current;

        if (e.isKey)
        {
            if (e.type == EventType.KeyUp)
            {
                if (e.keyCode == KeyCode.Return)
                {
                    KeyCodeReturn();
                }
            }
            else if (e.type == EventType.KeyDown)
            {
                if (e.keyCode == KeyCode.UpArrow)
                {

                }
                else if (e.keyCode == KeyCode.DownArrow)
                {
                }
            }
        }

        switch (e.rawType)
        {
            case EventType.MouseDown:

                RawTypeMouseDown();

                break;

            case EventType.MouseDrag:

                RawTypeMouseDrag();

                break;

            case EventType.MouseUp:

                RawTypeMouseUp();

                break;
        }
    }`

但是我调用的地方是在`private void OnGUI()
{
if (!ConfigIsReady) { return; }

        HandleEvents();

        UpGUI();

        LeftGUI();

        MidGUI();

        RightGUI();

        Check();

        
    }`

一开始,所以,当搜索完毕后一定会报一个这个错误。后来我把这个监听按键和鼠标事件的HandleEvents放在所有GUI绘制之后就不再报错了。既:
`
private void OnGUI()
{
if (!ConfigIsReady) { return; }

        UpGUI();

        LeftGUI();

        MidGUI();

        RightGUI();

        Check();

        HandleEvents();
    }

`

于是问题得到了解决。

后来查了下资料,发现是因为:由于事件类型为EventType.Layout,unity在Ongui中记录此时编辑器的排版信息,但是并不绘制,等到EventType.Repaint时根据排版信息绘制。而本bug中,点击按钮时改变了排版信息,但是EventType.Layout事件发生在点击按钮之前,此时EventType.Repaint事件发生时,排版信息无法对应得上,就会产生这个bug。

希望遇到问题的你也能得到有效的解决。

你可能感兴趣的:(一窥长短)