![](/img/trans.png)
[英]Is there a way to use EditorGUILayout.LabelField in EditorWindow inside GUILayout.Button?
[英]How to detect mouse over certain GUILayout/EditorGUILayout element?
我正在制作一個自定義的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
坐標。
那么,在這種情況下如何確定一個元素?
您可以使用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.