重绘时获取控件 1 在组中的位置,只有 1 个控件(Unity) 您所在的位置:网站首页 repaint翻译 重绘时获取控件 1 在组中的位置,只有 1 个控件(Unity)

重绘时获取控件 1 在组中的位置,只有 1 个控件(Unity)

2024-04-04 20:13| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有