簡體   English   中英

如何在某些GUILayout / EditorGUILayout元素上檢測鼠標?

[英]How to detect mouse over certain GUILayout/EditorGUILayout element?

我正在制作一個自定義的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坐標。

那么,在這種情況下如何確定一個元素?

您可以使用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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM