Чудесный UI Unity5 или приключения кнопки
Затеял я не давно игрулю на юнити и в процессе разработки игры под андроид, наткнулся на одну особенность, оказывается в юнити нет нормальной обработки событий кнопки UI.Button, таких каких Up и Down.
На событие OnClick моя функция ClickBtnRight выполнялась лишь один раз, в одном кадре, а если мы удерживаем кнопку то функция уже не запускается. В чем была проблема, пока кнопка нажата мне нужно двигать персонажа вправо, и для этого мне нужно знать когда на кнопку нажали и когда ее отжали. Допустим onClick() позволяет узнать когда нажали на кнопку, но никаких стандартных методов узнать когда ее отжали нету. Поискав немного в Google я узнал что это распространенная проблема и даже нашел ее решение, которое заключалось в том что бы выбрать изменение события на кнопке по цвету, т.е. ColorTint:
но я так и не разобрался как же по цвету можно отлавливать состояние нажатой кнопки, введу того что это решение было предложено вскользь и на английском языке, может у вас возникнет идея, поэтому я оставлю это тут.
Но я решил проблему иначе, выбрав события на кнопке по спрайту, т.е. SpriteSwap:
Я начал каждый кадр отлавливать какой же сейчас спрайт текущей на кнопке, и мне это позволило реализовать
if (btnLeft.GetComponent<Image> ().overrideSprite ==
btnLeft.GetComponent<Button> ().spriteState.pressedSprite) {
//двигаем героя влево
} else if (btnRight.GetComponent<Image> ().overrideSprite ==
btnRight.GetComponent<Button> ().spriteState.pressedSprite) {
//двигаем героя вправо
}
Когда условия срабатывало я просто двигал героя на определенное значение влево или вправо. Так же замечу что конструкция должна быть if else if что бы никогда не сработала обработка одновременно нажатия влево и вправо.
Вот как в целом выглядят у меня кнопки:
Так же если вам надо что бы кнопка не выделялась при нажатии просто закидывайте в строчку Pressed Sprite тот же спрайт кнопки просто с другим названием, как собственно сделал я.
Меня так же часто спрашивают знакомые как же я разрабатываю игру, и я снял видео о том как это происходит в живую на экране...интересно ли вам будет увидеть подобное...это 2 часа например видео моей работы, а работаю я в тишине)))
Надеюсь вам понравиться мой пост и я продолжу выкладывать какие нибудь важные моменты разработки, пишите что бы вы хотели услышать, я постараюсь ответить или сделаю пост.
Разрабатываю на Unity 5.3.2 на C# под андроид.
Игра в стадии разработки...хотел показать как двигается персонаж...но пока не могу выкладывать видео)))
Это мой первый пост не судите строго :) Вот вам картинка из игры..
С применительной точки зрения, нужно использовать компонент Event Trigger.
С программной точки зрения
using UnityEngine.EventSystems;
[DisallowMultipleComponents]
public sealed class SomeClass : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
____public void OnPointerDown(PointerEventData eventData)
____{
____}
____public void OnPointerUp(PointerEventData eventData)
____{
____}
}
посмотри на это:
серьезно? я бы такой костыль даже когда в школе учился не поставил:)
Раз уж тут такие дела, то спрошу. Какие альтернативы kivy есть для разработки под андройд на питоне 3?
Event Trigger отменили ? Юзай его, что за люди пошли, не знают всего что есть в Unity и сразу посты писать...