unity EditorGUILayer绘制报错

最近在开发一个可视化工具的时候,遇到了一个代码错误,小小的记录一下

  • 具体的报错信息:ArgumentException: Getting control 0's position in a group with only 0 controls when doing Repaint A
    从Unity的报错信息上我们可以得知在OnGUI绘制的时候,它找不到可控的位置。经过查找和验证发现一个很有意思的事情:OnGUI函数每帧并不是仅仅只调用一次!
    通常,当没有输入处于活动状态时,会使用EditorGUILayout和Repaint调用OnGUI两次。在EditorGUILayer调用期间,将处理GUILayout调用并计算控件的位置和大小,屏幕上实际上不会显示任何内容。其次,调用Repaint事件时调用它,这次控件实际上是用计算出的位置和大小绘制的。当有一个有效输入(鼠标,键盘等)时,它也被称为额外时间,并且此调用始终是最后一次,它也会导致在屏幕上绘图。按照上述的逻辑,我们就可以很清楚的知道,当我们在OnGUI里面进行动态的绘制时,要避免对EditorGUILayer的改变,不然在同一帧的不同OnGUI上,它有可能会找不到你需要的EditorGUILayer的位置坐标。
  • 解决方法:我使用了EditorGUI绘制来代替EditorGUILayer,对于EditorGUI,我们可以通过计算来传入位置信息,使得在每一次的绘制都能够获取到真正的位置信息,避免出错。
原文地址:https://www.cnblogs.com/fzuljz/p/11138096.html