Как отловить состояние кнопки GUI [Решено]

Программирование на Юнити.

Re: Как отловить состояние кнопки GUI

Сообщение Golandez 04 мар 2011, 14:48

Что касается OnMouse, то точно-точно оно с GUI. (например, с .Button) работает? Ведь вроде (то есть, в справке так сказано) только с коллайдерами и GUIElement (guitexture, например).

А где я написал,что работает? :-?
Эмм... а как мы из этого кода получим искомые состояния "onHover, onOut и т.д"?

Никак.onHover, onOut ,не является состоянием кнопки.Если мы не ушли еще в сторону,мы обсуждаем состояние кнопки,а не состояние курсора.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Как отловить состояние кнопки GUI

Сообщение seaman 04 мар 2011, 15:14

onHover, onOut ,не является состоянием кнопки

Кнопка может менять вид и поведение в зависимости от того на ней курсор или не на ней. Изменение вида и поведения == изменение состояния. А вот курсор как раз обычно не меняет своего состояния (хотя,конечно может и менять...). Так что onHover, onOut - это состояния кнопки, которые инициируются курсором.

Т.к. MouseMove только в редакторе, то нужно в Update() самостоятельно генерить событие MyMouseMove. И в кнопке проверять вошли в ее пределы - OnEnter, вышли - OnLeave, внутри нее сдвинулись - OnHover...

ЗЫ: а тут что форум не предупреждает, что кто-то написал сообщение пока ты редактировал свое?
Последний раз редактировалось seaman 04 мар 2011, 15:21, всего редактировалось 2 раз(а).
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как отловить состояние кнопки GUI

Сообщение Zaicheg 04 мар 2011, 15:15

А где я написал,что работает?

Ну, автор просил для GUI-кнопок.
Никак.onHover, onOut ,не является состоянием кнопки.

Ну, автор просил именно эти вещи.
Если мы не ушли еще в сторону,мы обсуждаем состояние кнопки,а не состояние курсора.

Эмм.... ))
Nevers писал(а):Требуется сделать, чтобы при нажатии на GUI кнопку изменялся текст кнопки. Становился жирным. Вопрос такой. Как отловить состояние кнопки, onHover, onOut и т.д?


Теперь Неодроп не единственный человек, который зачастую не читает вопрос перед ответом :-
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как отловить состояние кнопки GUI

Сообщение Golandez 04 мар 2011, 15:59

У меня был фокус на
Как отловить состояние кнопки


Таки да...вырвал кусок из контекста :D
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Как отловить состояние кнопки GUI

Сообщение Nevers 04 мар 2011, 16:28

Жжёте )))
Nevers
UNIт
 
Сообщения: 56
Зарегистрирован: 22 фев 2011, 10:16

Re: Как отловить состояние кнопки GUI

Сообщение Nevers 04 мар 2011, 17:04

В общем если рассуждать теоретически, то вот через "SetNextControlName" должно получиться правильно получать состоянии кнопки. Но почему-то эта функция не работает для GUI.Button.
Делаю так
Синтаксис:
Используется csharp
void OnGUI(){
               
                GUI.SetNextControlName("MyButton");
                GUI.Button(new Rect(10, 70, 80, 20), "Button test");
               
                if (GUI.GetNameOfFocusedControl() == "MyButton")
                        Debug.Log("focused!");
               
        }
 


А если тоже самое сделать для инпута, то пашет.
Синтаксис:
Используется csharp
void OnGUI(){
                GUI.SetNextControlName("MyButton");
                GUI.TextField(new Rect(10, 10, 130, 20), "login");
               
                if (GUI.GetNameOfFocusedControl() == "MyButton")
                        Debug.Log("focused!");
}
 

В мане ничего не нашел поэтому поводу. Почему не пашет ?. :-B
Nevers
UNIт
 
Сообщения: 56
Зарегистрирован: 22 фев 2011, 10:16

Re: Как отловить состояние кнопки GUI

Сообщение Zaicheg 04 мар 2011, 17:11

Nevers писал(а):В общем если рассуждать теоретически, то вот через "SetNextControlName" должно получиться правильно получать состоянии кнопки.

Это вам даст только фокус. Наведение, нажатие и их разновидности всё равно придётся другими средствами определять.
Почему не работает пример -- пока не знаю.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как отловить состояние кнопки GUI

Сообщение Nevers 04 мар 2011, 17:15

Вот кстати похожая проблема с фокусом http://forum.unity3d.com/threads/55348- ... Scrollview
Nevers
UNIт
 
Сообщения: 56
Зарегистрирован: 22 фев 2011, 10:16

Re: Как отловить состояние кнопки GUI

Сообщение Nevers 04 мар 2011, 17:20

Zaicheg писал(а):
Nevers писал(а):В общем если рассуждать теоретически, то вот через "SetNextControlName" должно получиться правильно получать состоянии кнопки.

Это вам даст только фокус. Наведение, нажатие и их разновидности всё равно придётся другими средствами определять.
Почему не работает пример -- пока не знаю.

Согласен, придется все это реализовывать. Просто если фокус проставился на объект. Значит он ни кем не перекрывается, есть в области видимости пользователя, не отключен и т.д. Что исключает кучу кода, который пришлось писать мне чтобы сделать такие проверки.
Nevers
UNIт
 
Сообщения: 56
Зарегистрирован: 22 фев 2011, 10:16

Re: Как отловить состояние кнопки GUI

Сообщение Nevers 04 мар 2011, 17:35

Блин. Жесть.
Сделал вот такой вот тест....
Синтаксис:
Используется csharp
        void OnGUI(){
               
                GUI.SetNextControlName("MyButton");

                GUI.Button(new Rect(10, 70, 80, 20), "Move Focus")//При нажатии на кнопку ей фокус не передается никаким образом ((( Жесть ((((

                GUI.SetNextControlName("MyText");
                GUI.TextField(new Rect(10, 10, 130, 20), "login");//У тектового поля работает фокус при нажатии.
               
                if (GUI.GetNameOfFocusedControl() == "MyButton"){
                        Debug.Log("This button");//Отработает только при передаче фокуса через метод FocusControl (. Но не нажатием ((
                }
               
                if (GUI.GetNameOfFocusedControl() == "MyText"){
                        Debug.Log("This text");
                        GUI.FocusControl("MyButton");//Ы-ы-ы-ы . Это просто Магия ))) . А вот если мы фокус передадим через метод FocusControl на кнопку, то фокус передастся )))
                }
        }
 
Nevers
UNIт
 
Сообщения: 56
Зарегистрирован: 22 фев 2011, 10:16

Re: Как отловить состояние кнопки GUI

Сообщение Nevers 11 мар 2011, 20:16

Вот решение мое проблемы. Сделал так. Все работает.

Синтаксис:
Используется csharp
public void drawButton() {
               
                GUI.enabled = pEnabled;
                Rect lRect = new Rect(pX,pY,pWidth,pHeight);
                GUIContent lContent = new GUIContent(pText);
               
               
                Event current = Event.current;
                int lCurrentId = GUIUtility.hotControl;
        bool flag = lRect.Contains(current.mousePosition);
        bool flag2 = flag && pEnabled;
               
                int lControlID = GUIUtility.GetControlID(FocusType.Native);
        bool isHover = flag2 && ((lCurrentId-1 == lControlID) || (lCurrentId == 0));


        bool isActive = ((lControlID == lCurrentId-1) && pEnabled) && flag;
               
                Debug.Log(isHover +" - "+ isActive +" - "+ lCurrentId +" - "+ lControlID);
               
                if (isActive && lCurrentId-1 == lControlID) {
                       
                        GUI.skin.button.fontStyle = FontStyle.Bold;
                }      
                else{
                       
                        GUI.skin.button.fontStyle = FontStyle.Normal;
                       
                }
               
                bool lReturn = GUI.Button(lRect,lContent);
}

 
Nevers
UNIт
 
Сообщения: 56
Зарегистрирован: 22 фев 2011, 10:16

Пред.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11