Показать сообщение отдельно
Старый 04.11.2010, 11:27   #299
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Фак по Юнити.

Сообщение от Stanis1av Посмотреть сообщение
Ну а если с Rect, то как найти все GUI?
Достаточно зарегистрировать в каком-то компоненте все области, в которых находятся элементы GUI.

Можно попробовать так:
public class MouseOnGUITester:MonoBehaviour
{
    public static 
readonly Dictionary<string,RectGUIRects = new Dictionary<string,Rect>();
    public static 
bool mouseOnGUI false;

    public 
void Update()
    {
       
Vector2 mp Input.mousePosition
       
mp.Screen.height mp.y
       
mouseOnGUI false;
       foreach (var 
rect in GUIRects)
       {
           if(
rect.Value.Contains(mp))
           {
               
mouseOnGUI true;
               break;
           }
       }
    }

    public static 
void RegisterRect(string rectNameRect 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(100100200200));
}

// разрегистрация
public void OnDisable()
{
    
MouseOnGUITester.UnRegisterRect("MyMenuRect");
}


// проверка
public void Update()
{
  if (!
MouseOnGUITester.mouseOnGUI )
  {
     
// действие
  
}

PS: писал сразу сюда, возможно ошибок налепил...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием