具体的报错信息:ArgumentException: Getting control 0's position in a group with only 0 controls when doing Repaint A
OnGUI在每次绘制时会调用2次,第1次计算所有控件的位置,所有EdtorGUILayout控件方法返回的Rect均为0;第2次根据位置来绘制所有的内容,此时控件方法返回的Rect是实际坐标。
我的项目用到EdtorGUILayout.BeginScrollView生成滚动列表,因为需要显示大量内容,所以做了个优化:预计算每行的位置,当此行处于viewport时显示内容,否则显示空白。
通用打日志发现,系统生成的每行高度并不是一样,一般在19-21之间随机浮动,这样就无法预计算出每行的位置,所以改在第2次调用OnGUI时,使用控件方法返回的Rect实时计算。