2017-10-31 13 views
1

私はカスタムEditorWindowを作っています。そして、現在のマウスの位置にある要素を特定したいと思います。特定のGUILayout/EditorGUILayout要素でマウスを検出するにはどうすればよいですか?

GUIまたはEditorGUIを使用すると簡単です。 GUI/EditorGUIRect位置を使用して、必要な位置に要素を配置します。そして、私のコードは次のようになります

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

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

ええ、私はこの方法を見ましたが、私はイベントタイプは、単に再描画ではないのMouseDownまたはMouseUpイベントまたはMouseDragなどであれば何をするか理解していません。そのテストコードのコードは機能しません –

+0

便利なサンプルが追加されました –

関連する問題