Сообщение от Stanis1av
Ну а если с Rect, то как найти все GUI?
|
Достаточно зарегистрировать в каком-то компоненте все области, в которых находятся элементы GUI.
Можно попробовать так:
public class MouseOnGUITester:MonoBehaviour
{
public static readonly Dictionary<string,Rect> GUIRects = new Dictionary<string,Rect>();
public static bool mouseOnGUI = false;
public void Update()
{
Vector2 mp = Input.mousePosition;
mp.y = Screen.height - mp.y;
mouseOnGUI = false;
foreach (var rect in GUIRects)
{
if(rect.Value.Contains(mp))
{
mouseOnGUI = true;
break;
}
}
}
public static void RegisterRect(string rectName, Rect rect)
{
GUIRects[rectName] = rect;
}
public static void UnRegisterRect(string rectName)
{
if(GUIRects.ContainsKey(rectName) GUIRects.Remove(rectName);
}
}
Бросить этот компонент на любой объект в сцене и регистрировать по имени все области, в которых GUI есть. Если область исчезает - разрегистрировать ее (например в OnDisable компонента с GUI). Если Область изменила размер или положение, то ее можно зарегистрировать заново.
Пользоваться:
// регистрация
public void Start()
{
MouseOnGUITester.RegisterRect("MyMenuRect", new Rect(100, 100, 200, 200));
}
// разрегистрация
public void OnDisable()
{
MouseOnGUITester.UnRegisterRect("MyMenuRect");
}
// проверка
public void Update()
{
if (!MouseOnGUITester.mouseOnGUI )
{
// действие
}
}
PS: писал сразу сюда, возможно ошибок налепил...