Чудесный UI Unity5 или приключения кнопки

Чудесный UI Unity5 или приключения кнопки Unity, Unity5, Gamedev, Мобильные игры, Android, Платформер, Игры unity, Длиннопост

Затеял я не давно игрулю на юнити и в процессе разработки игры под андроид, наткнулся на одну особенность, оказывается в юнити нет нормальной обработки событий кнопки UI.Button, таких каких Up и Down.

Чудесный UI Unity5 или приключения кнопки Unity, Unity5, Gamedev, Мобильные игры, Android, Платформер, Игры unity, Длиннопост

На событие OnClick моя функция ClickBtnRight выполнялась лишь один раз, в одном кадре, а если мы удерживаем кнопку то функция уже не запускается. В чем была проблема, пока кнопка нажата мне нужно двигать персонажа вправо, и для этого мне нужно знать когда на кнопку нажали и когда ее отжали. Допустим onClick() позволяет узнать когда нажали на кнопку, но никаких стандартных методов узнать когда ее отжали нету. Поискав немного в Google я узнал что это распространенная проблема и даже нашел ее решение, которое заключалось в том что бы выбрать изменение события на кнопке по цвету, т.е. ColorTint:

Чудесный UI Unity5 или приключения кнопки Unity, Unity5, Gamedev, Мобильные игры, Android, Платформер, Игры unity, Длиннопост

но я так и не разобрался как же по цвету можно отлавливать состояние нажатой кнопки, введу того что это решение было предложено вскользь и на английском языке, может у вас возникнет идея, поэтому я оставлю это тут.

Но я решил проблему иначе, выбрав события на кнопке по спрайту, т.е. SpriteSwap:

Чудесный UI Unity5 или приключения кнопки Unity, Unity5, Gamedev, Мобильные игры, Android, Платформер, Игры unity, Длиннопост

Я начал каждый кадр отлавливать какой же сейчас спрайт текущей на кнопке, и мне это позволило реализовать

if (btnLeft.GetComponent<Image> ().overrideSprite ==

btnLeft.GetComponent<Button> ().spriteState.pressedSprite) {


//двигаем героя влево


} else if (btnRight.GetComponent<Image> ().overrideSprite ==

btnRight.GetComponent<Button> ().spriteState.pressedSprite) {


//двигаем героя вправо


}


Когда условия срабатывало я просто двигал героя на определенное значение влево или вправо. Так же замечу что конструкция должна быть if else if что бы никогда не сработала обработка одновременно нажатия влево и вправо.

Вот как в целом выглядят у меня кнопки:

Чудесный UI Unity5 или приключения кнопки Unity, Unity5, Gamedev, Мобильные игры, Android, Платформер, Игры unity, Длиннопост

Так же если вам надо что бы кнопка не выделялась при нажатии просто закидывайте в строчку Pressed Sprite тот же спрайт кнопки просто с другим названием, как собственно сделал я.


Меня так же часто спрашивают знакомые как же я разрабатываю игру, и я снял видео о том как это происходит в живую на экране...интересно ли вам будет увидеть подобное...это 2 часа например видео моей работы, а работаю я в тишине)))


Надеюсь вам понравиться мой пост и я продолжу выкладывать какие нибудь важные моменты разработки, пишите что бы вы хотели услышать, я постараюсь ответить или сделаю пост.


Разрабатываю на Unity 5.3.2 на C# под андроид.


Игра в стадии разработки...хотел показать как двигается персонаж...но пока не могу выкладывать видео)))


Это мой первый пост не судите строго :) Вот вам картинка из игры..

Чудесный UI Unity5 или приключения кнопки Unity, Unity5, Gamedev, Мобильные игры, Android, Платформер, Игры unity, Длиннопост

Лига Разработчиков Видеоигр

6.7K постов22.1K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

6
DELETED
Автор поста оценил этот комментарий

С применительной точки зрения, нужно использовать компонент Event Trigger.

С программной точки зрения


using UnityEngine.EventSystems;


[DisallowMultipleComponents]

public sealed class SomeClass : MonoBehaviour, IPointerDownHandler, IPointerUpHandler

{

____public void OnPointerDown(PointerEventData eventData)

____{

____}


____public void OnPointerUp(PointerEventData eventData)

____{

____}

}

раскрыть ветку
4
Автор поста оценил этот комментарий

посмотри на это:

Иллюстрация к комментарию
раскрыть ветку
1
Автор поста оценил этот комментарий
if (btnLeft.GetComponent<Image> ().overrideSprite ==
btnLeft.GetComponent<Button> ().spriteState.pressedSprite) {

серьезно? я бы такой костыль даже когда в школе учился не поставил:)

раскрыть ветку
1
Автор поста оценил этот комментарий

Раз уж тут такие дела, то спрошу. Какие альтернативы kivy есть для разработки под андройд на питоне 3?

раскрыть ветку
Автор поста оценил этот комментарий

Event Trigger отменили ? Юзай его, что за люди пошли, не знают всего что есть в Unity и сразу посты писать...

раскрыть ветку