Пожалуйста помогите с UI

техническая поддержка по Unity

Сообщение Пожалуйста помогите с UI
» 16 апр 2016, 15:41

Здравствуйте. Вот недавно перешел с c2 на Unity.
Решил сразу начать с андроид игры.
Естественно для андроид нужно альтернативное управление. Решил сделать, как в Minecraft PE, стрелочками.
Добавил Button'ы 5 штук. Для движения и для прыжка.
Создал метод void OnMouseDown().
Для кнопок UI он не срабатывает. Хотя для объектов на самой сцене (игра в 3D) все работает. Проверял через Debug.Log.
Как это исправить? Или может быть для кнопок UI есть другой специальный метод?? :help:
Аватара пользователя

Участник
Сообщений: 89
Я тут с 28 окт 2015
Репутация 2 [ ? ]

Сообщение Пожалуйста помогите с UI
» 16 апр 2016, 18:14

Разобрался. Только не понял как сделать, чтобы действие происходило не в момент нажатия кнопки, а когда кнопка зажата.
Приведу пример из c2 для тех, кто с ним знаком. У меня происходит действие, как Mouse On Click. А нужно Mouse button is Down.
З.Ы. Все понял. Нужно делать через Event Trigger. Только не один триггер не подходит. Единственный более менее подходящий Update Selected перестает совершать действие только тогда, когда уже кликнешь по другому мест. А если в Navigation поменять Automatic на None, то перестает вообще работать :help:
Аватара пользователя

Участник
Сообщений: 89
Я тут с 28 окт 2015
Репутация 2 [ ? ]

Сообщение Пожалуйста помогите с UI
» 16 апр 2016, 21:00

 ц
Где-то уже что-то разрабатываю...
Аватара пользователя

Участник
Сообщений: 78
Я тут с 24 янв 2015
Лицензия: Personal
Репутация 9 [ ? ]

Сообщение Пожалуйста помогите с UI
» 17 апр 2016, 19:11

VaIsKeTsOuR, можно поподробнее?
Это, как я понял, нужно записывать в самом C# скрипте. А через Event Trigger никак?
Аватара пользователя

Участник
Сообщений: 89
Я тут с 28 окт 2015
Репутация 2 [ ? ]

Сообщение Пожалуйста помогите с UI
» 17 апр 2016, 20:09

Не знаю что там ты делаешь через Event Trigger
Я тебе дал название методов вместо OnMouseDown() которые выполняют действие когда кнопка зажата. А чтоб на кнопках UI работали эти все методы нужно к ним добавить компонент Physics 2D > Circle Collider 2D или Box Collider 2D и т.д. в общем любой Collider.
P.S.Если мы не понимаем друг друга то кусок кода в студию
 ц
Где-то уже что-то разрабатываю...
Аватара пользователя

Участник
Сообщений: 78
Я тут с 24 янв 2015
Лицензия: Personal
Репутация 9 [ ? ]

Сообщение Пожалуйста помогите с UI
» 17 апр 2016, 20:45

VaIsKeTsOuR, спасибо! Репутацию плюсанул
Аватара пользователя

Участник
Сообщений: 89
Я тут с 28 окт 2015
Репутация 2 [ ? ]

Сообщение Пожалуйста помогите с UI
» 17 апр 2016, 21:52

VaIsKeTsOuR, помоги плиз.
Код: Выделить всё
public void OnMouseOver(){
       player.transform.Translate (Vector3.back * 8 * Time.deltaTime, Space.Self);
      Debug.Log("Mouse Over");
   }

В чем ошибка? Прости если очень сильно туплю. Я просто установил юнити неделю назад...
Перс не хочет идти назад. Скрипт висит на кнопках. Переменная player типа GameObject есть. Игрок в эту переменную в редакторе занесен
Аватара пользователя

Участник
Сообщений: 89
Я тут с 28 окт 2015
Репутация 2 [ ? ]

Сообщение Пожалуйста помогите с UI
» 18 апр 2016, 00:11

Nowar писал(а):В чем ошибка?

В этой части кода ошибки нет - проверил работает.
Если вперёд и в стороны всё работает и Если ошибку в Console не выдаёт и красных предупреждений нигде нет - значит где-то что-то неправильно наложено - скрипт или кнопка на кнопку заходит, совпадение имён и т.д.
 ц
Где-то уже что-то разрабатываю...
Аватара пользователя

Участник
Сообщений: 78
Я тут с 24 янв 2015
Лицензия: Personal
Репутация 9 [ ? ]

Сообщение Пожалуйста помогите с UI
» 18 апр 2016, 13:12

Все проблему решил. Как и предполагалось я использовал триггеры PointerUp и PointerDown. Один ставит переменной значение на 0, а другой на 1. И если значение равно 1, то двигать гг.
:cool:
Аватара пользователя

Участник
Сообщений: 89
Я тут с 28 окт 2015
Репутация 2 [ ? ]

Сообщение Пожалуйста помогите с UI
» 18 апр 2016, 17:13

Код: Выделить всё
   void Update () {
      if (Input.mousePosition.x > mousexswipe) {
         player.transform.rotation.y = (player.transform.rotation.y + (Input.mousePosition.x - mousexswipe));
         mousexswipe = Input.mousePosition.x - 0.01;
      }
   }
   public void SwipeStart(){
      mousexswipe = Input.mousePosition.x;
   }

Набросал такой код для поворота FPS контроллера. Набросал так для проверки. Не руководствовался ничьими советами. Но по идее должно работать. Метод SwipeStart() вызывается Event Trigger'ом "Begin Drag".
В моих мыслях это должно выглядеть так.
При начале свайпа в переменную забивается текущая координата мыши по иксу. Если позиция мыши больше, чем эта переменная, то к углу персонажа добавляется разница между двумя этими значениями.(Потом проставлю коэффициент, чтобы не каждые 360 пикселей проводился полный поворот камеры).
А потом переменной, которая показывает позицию мыши по иксу прописывается значение равное текущей позиции мыши минус 0.01, чтобы действие не прекращалось из-за того, что переменная становится равной позиции мышки.
Unity выдает такую ошибку: "Assets/MyScripts/CameraPosition.cs(15,42): error CS1612: Cannot modify a value type return of 'UnityEngine.transform.rotation'. Consider storing the value in a temporary variable".
В чем я натупил?
Все на той строчке и в том столбце просмотрел. Ничего не нашел. Перевел это так. "Невозможно изменить тип возвращаемого значения 'UnityEngine.transform.rotation'. Рассмотрим сохранения значения во временной переменной"
А если бы ошибки не было, то такой скрипт заработал бы? Если нет, то в чем ошибка? Повторюсь, изучаю юнити только неделю, так что особо сильно на мое нубство не агрите :acute:
Последний раз редактировалось Nowar 18 апр 2016, 17:25, всего редактировалось 1 раз.
Аватара пользователя

Участник
Сообщений: 89
Я тут с 28 окт 2015
Репутация 2 [ ? ]



Вернуться в Вопрос-Ответ по Unity

Сейчас эту тему просматривают

Зарегистрированные пользователи: нет зарегистрированных пользователей

Наверх