Создание виртуального джойстика на юнити (модификации)
Всем привет! в прошлой статье я показал вам , как сделать виртуальный джойстик на движке юнити. Так как статья получилась слишком длинной, то я решил вынести все модификации джойстика в отдельную (эту) статью.
Динамический джойстик
Этот джойстик будет отличаться от джойстика из прошлой статьи тем, что его зона тоже будет двигаться за пальцем, если он (то есть палец) уйдет за её пределы.
Чтобы было проще, вот скрипт из прошлой статьи:
Итак, приступим.
Для начала изменим скрипт так, чтобы ручка могда выйти за пределы зоны. Для этого удалим строчку, в которой мы обрезали вектор и немного изменим остальной код. Получиться должно следующее:
Я запостил только метод OnDrag ибо изменения произошли только в нём, а копировать весь код будет неудобно как для меня, так и для вас.
Хорошо, теперь ручка двигается по всему экрану, но нам нужно отследить момент, когда она выходит за пределы зоны.
Теперь, нам нужно просто передвинуть зону к пальцу, если палец за её пределами. Делается это так:
Ручка теперь двигается к пальцу, но делает это рывками. Для решения данной проблемы, уменьшим расстояние от пальца до зоны, умножив его на какое-нибудь число от 0 до 1. У меня это 0,05. Вы же подберите его так, как вам нравится.
Вот финальный скрипт:
Динамический джойстик готов.
Джойстик, пропадающий когда на него не нажимают.
Этот джойстик никак особо не отличается, но он немного удобнее в использовании.
Для скрытия джойстика во-первых нужно получить компоненты Image у зоны и ручки. Для ручки просто изменяем тип ссылки на ручку с GameObject на Image. А для зоны создаем отдельную ссылку и записываем в неё значение в Start-е при помощи GetComponent:
Теперь, просто изменяем альфа канал у обоих компонентов на 1 при клике и на 0 при убирании пальца с джойстика.
Джойстик с движением ручки по одной оси
Данный джойстик отлично заменяет кнопки движения и пригождается в тех случаях, когда не нужно двигать что-то по горизонтали или вертикали.
Для этой модификации требуется только слегка изменить метод OnDrag.
Вот что нужно сделать:
Выше представлен пример с движением ручки по горизонтали. Вот пример с движением по вертикали:
На этом все. В этой статье я показал модификации джойстика, написанного в прошлой статье.
Если вы хотите увидеть реализацию какой-нибудь другой механики в блоге, то пишите в комментариях. Также буду весьма рад отзывам.
Всем пока!
Безусловно полезная статья. Вот еще примеры джойстиков, которые довольно удобны в использовании:
-Вариативный джойстик - в определенной области на экране можно нажать и джойстик переместится туда и будет там находится пока палец не будет отжат от экрана(при этом пальцем можно водится и сам стик должен следовать за пальцем, а джойстик находится в том месте где началось касание)
- Статичный джойстик(с зоной) - аналогично прошлому у него есть зона в котороую можно нажать , но в отличии от вариативного - сам джойстик останется там где и был, а вот стик будет направлен к касаниию(к примеру нажав справо от джойстика сам хэндлер (стик) будет направлен вправо)