我正在制作一个自定义的EditorWindow。我想确定哪个元素位于当前鼠标位置。
当我使用GUI
或EditorGUI
时 - 这很容易。 GUI/EditorGUI
使用Rect
位置,将元素放置在必须的位置。我的代码可以是这样的:
Rect button = new Rect(10, 10, 50, 50);
List<Rect> elements = new List<Rect>();
void OnEnable() {
// loop to initialize elements and add them to the list
}
void OnGUI() {
foreach (Rect element in elements) {
if (element.Contains(Event.current.mousePosition)) {
// get element information
}
}
}
但是GUILayout
/ EditorGUILayout
会自动放置元素,但它们没有Rect
坐标。
那么,在这种情况下如何确定一个元素呢?
答案 0 :(得分:0)
您可以使用GUILayoutUtility.GetLastRect()。
您必须在每个控件绘制后获取它以了解控制位置/大小。
使用示例:
private void OnGUI()
{
GUILayout.BeginHorizontal();
for (var i = 0; i < 6; i++)
{
var buttonResult = GUILayout.Button(string.Format("Button {0}", i));
var rect = GUILayoutUtility.GetLastRect();
var pos = Event.current.mousePosition;
if (rect.Contains(pos))
{
OnMouseOver(i);
}
if (buttonResult)
{
OnButtonClick(i);
}
}
GUILayout.EndHorizontal();
}
private void OnButtonClick(int buttinIndex)
{
Debug.LogFormat("OnButtonClick {0}", buttinIndex);
}
private void OnMouseOver(int buttinIndex)
{
Debug.LogFormat("OnMouseOver {0}", buttinIndex);
}