如何在某些GUILayout / EditorGUILayout元素上检测鼠标?

时间:2017-10-31 13:39:17

标签: c# unity3d

我正在制作一个自定义的EditorWindow。我想确定哪个元素位于当前鼠标位置。

当我使用GUIEditorGUI时 - 这很容易。 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坐标。

那么,在这种情况下如何确定一个元素呢?

1 个答案:

答案 0 :(得分:0)

您可以使用GUILayoutUtility.GetLastRect()。

Example

您必须在每个控件绘制后获取它以了解控制位置/大小。

使用示例:

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);
}