Странное поведение GUI.RepeatButton[РЕШЕНО]

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

Странное поведение GUI.RepeatButton[РЕШЕНО]

Сообщение M.A.K. 17 окт 2011, 15:47

Доброе время суток!
В результате хочу получить кнопку, если нажать на неё и держать нажатой левую кнопку мыши должно работать размещение на террейне нового объекта.
После отпускания кнопки объект должен остаться в последних координатах на террейне.
Все работает, за исключением того, что если мышкой подвести обратно к RepeatButton(после того как отпустили кнопку мыши и никуда не кликали) то кнопка срабатывает без нажатия на неё кнопкой мыши.
В чем может быть причина такой неправельной работы?
Синтаксис:
Используется csharp
public class RepeatButtonDebug : MonoBehaviour {
        public bool isClickToButton;
        public bool LeftClickUp;
        // Use this for initialization
        void Start () {
                isClickToButton = false;
        }
       
        // Update is called once per frame
        void Update () {
                if(Input.GetMouseButtonUp(0)){
                        LeftClickUp = true;
                }
                else {
                        LeftClickUp = false;
                }
        }
        void OnGUI(){
    if(!isClickToButton && GUI.RepeatButton(new Rect(50,50,100,100),"TST")){
            isClickToButton = true;
                        print("CLICK");
              }
    if( LeftClickUp && isClickToButton){
            isClickToButton = false;
             }
                 
}
}
Последний раз редактировалось M.A.K. 18 окт 2011, 20:07, всего редактировалось 1 раз.
M.A.K.
UNец
 
Сообщения: 42
Зарегистрирован: 16 июн 2011, 12:02

Re: Странное поведение GUI.RepeatButton

Сообщение M.A.K. 18 окт 2011, 13:05

Проблему обошел путем выноса GUI.Repeatbutton из условия и введением доп. переменной. А скрытие кнопки при нажатии сделал путем перемещения координат кнопки за пределы экрана.
Неужели никто на форуме не сталкивался с такой проблемой??? Или я не правильно использую этот элемент???
M.A.K.
UNец
 
Сообщения: 42
Зарегистрирован: 16 июн 2011, 12:02

Re: Странное поведение GUI.RepeatButton

Сообщение IDoNotExist 18 окт 2011, 14:04

GUI.RepeatButton() Ловит на себе событие Input.GetMouseButtonDown(0), после того как она словила его, будет возвращать true до тех пор пока не словит событие Input.GetMouseButtonUp(0), также в своем фокусе.

В вашем случае вы как я понял уводите курсор с кнопки и событие Input.GetMouseButtonUp(0) происходит уже не в её фокусе, поэтому когда вы возвращаете курсор на GUI кнопку, она проверяет не нажата ли кнопка мыши, но перед этим возвращает еще один true ошибочно полагая что кнопка мыши нажата.

Вот както так, а чтобы избежать этого не нужно городить огород и перемещать координаты кнопки, достаточно добавить еще одно условие которое будет проверять нажата кнопка мыши или нет. Лучше всего еще и проверять Input.GetMouseButtonDown(0) . можно к примеру сделать так.

Синтаксис:
Используется csharp

  void Update () {
                if(Input.GetMouseButtonDown(0)){
                        LeftClickDown = true;
                }
                else {
                        LeftClickDown = false;
                }
        }

void OnGUI(){
     bool buttonPressed = GUI.RepeatButton(new Rect(50,50,100,100),"TST");
   
    if(buttonPressed && LeftClickDown){
         if(!isClickToButton){
            isClickToButton = true;
                        print("CLICK");
              }
    }

   if( LeftClickUp && isClickToButton){
           isClickToButton = false;
   }



 
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: Странное поведение GUI.RepeatButton

Сообщение M.A.K. 18 окт 2011, 15:28

Спасибо за развернутый ответ(я про фокусы даже и не подумал), я практически так-же сделал. Прячу кнопку, потому-что под ней размещается новый объект и его за кнопкой не видно.
M.A.K.
UNец
 
Сообщения: 42
Зарегистрирован: 16 июн 2011, 12:02


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

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

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