重绘时获取控件 1 在组中的位置,只有 1 个控件(Unity) | 您所在的位置:网站首页 › repaint翻译 › 重绘时获取控件 1 在组中的位置,只有 1 个控件(Unity) |
IMGUI中有很多事件,但都是在事件之后调用的Layout,例如: Layout -> Repaint Layout -> MouseDown Layout -> ScrollWheel这里重要的是事件总是成对发生,并且每个事件之前总是Layout有. 有了这一切,没有什么能阻止你编写这样的代码: if(Event.current.type == EventType.Repaint){ EditorGUILayout.LabelField("Label"); }例如,代码只会导致错误: 在重绘时获取控件 0 在只有 0 个控件的组中的位置 为什么会这样?它是如何发生的? 在这个阶段,所有Layout未来的元素都被注册,它们在哪里以及它们的大小都没有关系。这个阶段是专门用于注册布局中元素的出现的。 Rect 在上面示例的步骤Repaint中,我们试图通过自动布局编写一个字符串,而无需先将其注册到Layout. 在这种情况下,布局伪数组中有 0 个条目,其中的字符串if尝试获取下一个,即 大小为 0 的数组中索引 0 处的条目。 如何解决? 如果没有完整的代码,您将无法理解,但很可能有一些代码if在窗口的内部绘制了一些东西。最好Repaint在方法结束时更改事件内部的所有 GUI 更改变量OnGUI,或者OnGUI在事件内部方法的最开始处执行相同操作Layout。这可能不是最优雅的解决方案,但这样的更改可确保下一个或当前一个Layout获得“新鲜”数据进行布局。而且一般来说关于编辑器自定义开发的文章和示例很少,所以这是我个人唯一能想到的。 附言“活动内部”是这样的: if(Event.current.type == EventType.Repaint){} |
CopyRight 2018-2019 实验室设备网 版权所有 |