- Платформер под Android на Unity3D
- Часть первая
- Часть вторая
- Скрипт движения 2D персонажа
- Управление в Android играх на Unity
- Платформенно зависимая компиляция
- Управление с touchscreen
- Основы
- Направление движения
- Мультитач
- Акселерометр
- Бонус
- Андроид-игры на UNITY3D
- А есть ли у вас план?
- Вперёд, к покорению виртуальных просторов!
Платформер под Android на Unity3D
Пожалуй, даже после выхода нового UI, создание интерфейса для Android’а осталось больной темой для многих.
Новая система “UI”, которая появилась в Unity 4.6 сильно упростила жизнь разработчикам, но все же, хотелось бы прояснить некоторые моменты, которые относятся к Android’у.
Из плюсов:
-Мощный набор инструментов
-Корректное масштабирование на разных разрешениях, что в свою очередь устраняет кучу лишней работы
-Поддержка сенсорного управления без дополнительных настроек
-Гибкость и простота в использовании
Статья будет разделена на две части.
Первая (базовая) — для тех, кто еще только начинает пользоваться Unity3D. Вторая — собственно, сама реализация управления для платформера под Android.
Часть первая
1) Для начала, создайте новую сцену File > New Scene.
2) В папке “Assets” создайте еще две папки: “Scripts” и “Sprites”.
3) Далее, спрайты, которые я подготовил, добавляем в папку “Sprites”.
Спрайты:
Ставим Filter Mode на пункт “Point” платформе и персонажу, поскольку они выполнены в пиксель арте.
Перетаскиваем на сцену спрайт персонажа, пару спрайтов платформ и фон(предварительно увеличив его в размере).
Должно получиться что-то похожее на:
Добавим нашему персонажу такие компоненты как:Rigidbody2D,CircleCollider2D и заморозим возможность вращения по оси Z.
Всем платформам добавим компонент: BoxCollider2D.
4) Добавим на сцену три Image’а через GameObject > UI > Image.
Это и есть наш будущий интерфейс(кнопки: вправо, влево, прыжок).
Подгоняем размеры и идем дальше:
Image’ам слева ставим “привязку” к левому нижнему краю, а правому — к правому нижнему.
Для каждого Image’а в Source Image перетаскиваем свой спрайт.
В результате должно получиться:
Вот и конец первой части.
Во второй части, мы перейдем к скриптингу и добавим кнопкам функционал.
Часть вторая
Теперь перейдем к основному:
1) Создайте новый скрипт в папке “Scripts” и назовите его “CharController” (писать будем на C#).
Вставляем в него код:
“Простота — залог успеха” — в нашем случае так и есть. Передвижение и прыжки персонажа были реализованы через отдельные void’ы.
Повесьте данный скрипт на персонажа. Склеить все это дело вместе, нам поможет Event System.
2) Для удобства переименуйте “кнопки” чтобы не запутаться.
Например:”leftButton”,”rightButton”,”jumpButton”.
Добавим каждой кнопке компонент Event Trigger.
Теперь, кнопке “Влево” в компоненте Event Trigger создайте два новых события — PointerDown и PointerExit.
В PointerDown и PointerExit создайте по одному событию, перетащите на каждый нашего персонажа(на котором обязательно должен висеть скрипт).Кликаем по выпадающему меню и находим наш скрипт “CharController” > void “Move(int)”.
Аналогичные манипуляции проведем с кнопкой “Вправо”.
Кнопке “Прыжок” добавим только PointerEnter > CharController > Jump(bool).
3) Пришло время выставлять значения.
Для кнопки “Вправо” тоже поменяем значение в PointerDown, но на “1”.
4) Запустим наш проект:
Конечно назвать данную статью “Разработка от А до Я” нельзя, но думаю многим теперь будет проще сделать управление для Android’а. Всем спасибо за внимание.
Источник
Скрипт движения 2D персонажа
Еще один скрипт управления персонажем, заточенный под 2D физику. В отличии от прочих, здесь имеются некоторые настройки. Возможен выбор осей. Например, если выбрать только ось Х, в этом случаи включается режим как для платформера, персонаж может двигаться по горизонтали и использовать прыжок. Если выбрать оси ХY, тогда скрипт переходит в режим как для скроллера, проще говоря, подходит для управления неким самолетом или вроде того, объект может двигаться не только по горизонтали, но и по вертикали, а та-же самая клавиша, что и в первом варианте, на этот раз выполняет роль ускорителя, то есть добавляет скорости. Кроме того, есть опция отслеживания позиции курсора, чтобы персонаж смотрел на него.
Создаем новый C# скрипт Player2DControl, со следующим содержанием:
speed — скорость движения, как не странно.
addForce — если выбран режим Оnly X, будет использовано для прыжка, при нажатии соответствующий клавиши. Во втором режиме, значение addForce будет прибавлено к speed, тем самым придавая ускорение.
lookAtCursor — отслеживание позиции курсора, персонаж будет вращаться по оси Z. Важно помнить, что лицом считается ось Х.
isFacingRight — если на старте сцены персонаж смотрит вправо, то надо ставить true.
При движении только по горизонтали, разворот персонажа осуществляется через функцию Flip. Так же, чтобы прыжок был возможен, все объекты по которым возможно передвижение, как бы земля/поверхность, у всех них должен быть тег Ground.
Источник
Управление в Android играх на Unity
Unity славен возможностью создавать игры кроссплатформенно. Это действительно круто взять и сделать свою игру и на ПК и на телефон, да еще чтобы и в браузере поиграть. И если с браузером и ПК всё понятно, то у новичков случается ступор при взгляде на сенсорный экран. Там же кнопок нет! И мышки. Цель этого туториала – научить вас работать с сенсорным экраном и создавать разные варианты управления: управление одним касанием, несколькими (телефоны же поддерживают мультитач), а также рассмотрим акселерометр и как считывать с него данные.
Итак, новичок проходит туториалы, переписывает код и всё работает. Персонаж реагирует на клавиатуру, следит за курсором мышки и даже стреляет не промахиваясь – туда куда указал прицел, который привязан к курсору.
Но когда доходит до создания игры под мобильные устройства, эти все способы программирования не подходят. Input.GetAxis тут не работает. Начнем разбираться как это чинить.
Платформенно зависимая компиляция
Вот хочу создать игру, управлять которой можно и в самом редакторе и на телефоне. Это что же, писать дополнительные скрипты и вешать их на каждый управляемый объект?! Звучит страшно. По счастью, красота кроссплатформенности Unity заключается в том что существуют способы определить с какого девайса идет управление и в зависимости от этого решать как будет идти обработка управления. Такая вещь называется платформенно зависимая компиляция. Она представляет собой директивы препроцессора. Задача этих директив – указать, какие участки кода должны выполняться в зависимости от того, с какой платформы работает приложение. Unity предоставляет инструменты как для определения платформ так и для определения версий с которых запускается код.
Мы рассмотрим те пункты, которые непосредственно касаются темы сенсорного управления игрой, а любопытные могут посмотреть остальные варианты в официальной документации Unity. Итак, прежде чем приступать к написанию кода контроллера для мобильных устройств, нужно предусмотреть необходимость проверки игры в редакторе.
Важными директивами есть следующие:
- UNITY_STANDALONE – добавляется для части скриптов, которые выполняются при запуске игры из системы Windows или Linux, или Mac OS X.
- UNITY_WEBGL – работа с WebGL
- UNITY_IOS – будет исполняться код для iOS платформы
- UNITY_ANDROID – директива для платформы Android
Это список самых часто используемых. Есть и другие, методы работы с ними такие же.
Итак, как работать с этими директивами препроцессора и платформенно зависимой компиляцией? Синтаксис директив следующий.
#if – директива указывает условие при котором будет выполняться следующая часть кода. Если есть директива #if , то должна быть и соответствующая закрывающая директива #endif, которая обозначает границу компилируемой части.
Также существует директива #elif, которую можно воспринимать как else if. Работает схожим образом. Также отдельно существует директива #else, но она обязательно должна идти последней и после нее обязательно указывать #endif. Возможно это выглядит странно и страшно, но на самом деле это работает по принципу условий if – else в привычном программировании. Только тут присутствует не игровая логика, а скорее логика управления кодом. Итак, пример кода с директивами.
Несколько слов о том, где именно использовать эти директивы. Не пишите важный код внутри одной из директив, иначе не скомпилируется. Дело в том, что тот код, который написан внутри условия, допустим UNITY_IOS, никогда не выполнится при запуске в редакторе. Считайте, что вы просто вырезаете из своего исходного кода части – они никогда не выполнятся. И вот если их отсутствие мешает успешной компиляции, то наверняка этим частям кода не место внутри директивы. Итак, если это понятно, то самое время двигаться вперед к управлению с телефона!
Управление с touchscreen
Природа этого элемента управления несколько иная от клавиатуры и мышки. Скрипты стоит писать с учетом особенностей тачскринов. Поскольку на тачскрине можно зарегистрировать не один, а несколько касаний, то в памяти сохраняется массив, в котором записана информация о каждом касании. В Unity Scripting API за это отвечает класс Input – такой же как и при регистрации ввода с клавиатуры и мыши, однако методы другие.
Основы
Итак, рассмотрим такой сценарий – необходимо зарегистрировать касание одним пальцем на экране. Сначала посмотрим, как узнать позицию касания, а потом – как зарегистрировать касание по игровому объекту. Приступим.
Помним, что информация о касании записывается в массив. Даже если касание было одно, то у нас всё равно есть массив хоть и состоящий из одного элемента. Тут будет продемонстрирована одна из хороших практик при работе с API. Написание кода таким образом делает его максимально безопасным и читаемым.
Алгоритм состоит из следующий частей:
- Зарегистрировать хотя бы одно касание
- Сохранить интересующий нас элемент массива
- Получить фазу касания экрана и что-то сделать.
И не забываем про директивы и платформенно зависимую компиляцию. Это первое что мы сделаем в коде.
Внутри этой директивы мы имеем право описать управление. Первое – удостовериться,что касание произошло. Input записывает количество касаний в Input.touchCount.
Второе – получить первое в списке касание.Существует объект Touch, который содержит всю информацию об единичном касании. Чтобы получить нужную информацию используем метод Input.GetTouch(). Этот метод принимает как аргумент любое целое число – оно и будет показывать индекс искомого элемента в массиве. Про массивы и то как с ними работать можно найти в любом учебнике по с#. Внутри предыдущего условия пишем:
Отлично, мы получили информацию о касании и сохранили её в переменную. Что мы можем извлечь из этого.
Любые сенсорные экраны могут регистрировать разные данные: фаза касания (начало, движение, окончание), позицию на экране и количество быстрых касаний, а также информацию о поведении (траектория движения и подобное). В примерах будет использоваться имя переменной, которую мы создали в предыдущем этапе, а именно myTouchтипа Touch.
Естественно имя переменной вы можете задавать сами.
- Фаза касания: их существует несколько. Найти их можно в свойстве myTouch.phase объекта Touch. Представляют собой перечисление TouchPhase. Варианты такие:
- Began – произошло начало касания
- Moved – пользователь водит пальцем по экрану
- Stationary – пользователь касается экрана, но не меняет положения касания
- Ended – касание прекратилось
- Canceled – система не может считать касание(например пользователь касается ладонью и невозможно определить количество контактов)
- Позиция на экране. Находится в свойстве myTouch.position. Также существует deltaPosition, которое показывает расстояние между позицией в текущем кадре и в предыдущем. Позиция выводится в координатах экрана, расчет которых проходит с левого нижнего угла.
- myTouch.tapCount – количество быстрых касаний. Можно использовать для программирования “дабл-клика”. Если касания происходят быстро несколькими пальцами, то они могут быть неправильно считаны, как касание одним пальцем.
- myTouch.fingerId – значение по которому можно отслеживать касание. Сохраняет свое значение в каждом кадре и поэтому является отличным источником для работы со сложными траекториями движения, анализе жестов. По сути, это уникальный Id для каждого конкретного жеста (не путать с порядковым номером касания). Отлично, с теорией разобрались. Рассмотрим два практических примера.
Пример 1. Получение координат точки на экране, куда пользователь указал в игре.
Тут просто выводится в консоль значение позиции на экране. Позиция на экране задается через Vector2. Однако в консоль будет выводится несколько сообщений, так как одно касание может длиться несколько кадров (мы пишем это в Update). Если нужна только точка в момент касания, то обращаемся к фазам касания. Код будет выглядеть так:
Появилось только условие (выделено желтым).
Пример 2. Касание по объекту на экране. Тут будет использован Raycast.
Направление движения
С основами разобрались, теперь более сложные задачи, которые задаются разработчикам. Одна из таких задач – определение направления, куда пользователь провёл пальцем. Направление будем определять с помощью векторов, а именно – нормализации вектора. В разделе Основы упоминалось о свойстве deltaPosition. Его и будем использовать. Для примера представлен скрипт, который заставляет объект двигаться в заданном направлении бесконечно (или до изменения инструкций)
Мультитач
Для работы с несколькими точками касания на экране необходимо вспомнить про циклы. Помним, что каждый момент касания фиксируется в массиве, а значит, если пройти по всему массиву циклом, то можно получить информацию о каждом касании. В остальном работа не отличается от касания одним пальцем.
Input.touchCount – это количество элементов в массиве. Получение объекта по индексу – myTouches[i]. И с этой конструкцией можно работать также как в предыдущем разделе мы работали с элементами Touch.
Акселерометр
Мобильные устройства позволяют считывать свое положение в трехмерном пространстве. В Unity для этого существуют методы. Прежде всего нужно разобраться с осями. Если вы возьмете телефон в руки и разместите его вертикально (портретная ориентация), то ось Y будет указывать вверх-вниз, ось X в стороны, а Z будет показывать глубину. Работа с акселерометром на самом деле более чем простая. За это отвечает Input.acceleration, который работает почти также как Input.GetAxis.
Рассмотрим пример. Заставим объект будет двигаться туда, куда наклонено устройство.
Бонус
Небольшой совет о том, как проверять работу приложений. Естественно проверить корректность работы своей системы управления можно только на устройстве. И что же, всё время билдить миллионы версий игры и проверять работу? По счастью, нет, не нужно. Команда Unity позаботилась о своих пользователях выпустив приложение Unity Remote.
На сайте очень хорошо описано как устанавливать и настраивать, но есть пара советов. Первое, не забудьте перевести свой телефон в режим разработчика. Второе, при подключении к компьютеру выберите пункт касающийся передачи файлов. И третье, если вы всё сделали как сказано на сайте и ничего не забыли, но у вас не работает – перезагрузите Unity, не отключая телефон от компьютера.
Надеемся, эти советы помогут вам создать свою первую игру под сенсорные экраны и позволит проявить всю свою креативность.
Андроид-игры на UNITY3D
С каждым днём всё более популярным становится такое направление, как самостоятельная разработка компьютерных игр. Используя межплатформенную среду разработки компьютерных игр Unity 3d, можно создавать онлайн уникальные игры интересующего жанра для платформ Android, Windows, iOS, Blackberry, Wii, Xbox, Playstation. Широкое признание Unity3d завоевал среди желающих создать игру для «Андроид» самостоятельно. Этот конструктор имеет игровой движок, максимально реализующий возможности OpenGL и DirectX, а также содержит редакторы 3D-моделей и другие полезные программы для настройки звуков, ландшафтов, шейдеров и прочих компонентов.
Единственная сложность, с которой может столкнуться малоопытный в программировании пользователь – это необходимость написания программного кода. Но это не проблема, поскольку UNITY3DSCHOOL научит, как быстро и просто справиться с этой задачей. Особенно если вы горите идеей создать игру для «Андроид» и стать автором уникального программного продукта. Авторские методики обучения разработке игр позволят превратить компьютерное хобби в прибыльное занятие, приносящее хороший дополнительный доход.
А есть ли у вас план?
Если вы решили попробовать свои силы в качестве разработчика игры, UNITY3DSCHOOL рекомендует придерживаться следующего незамысловатого плана действий.
- Концепция. Прежде всего необходимо детально проработать саму идею, тогда будет понятно, в каком направлении двигаться дальше.
- Дизайн-проект или создание наброска. Это фактически техническое задание, план того, как создать игру для «Андроид» пошагово.
- Изучение особенностей UNITY и её возможностей для понимания, насколько она сможет раскрыть потенциал будущей игры.
- Моделирование игры онлайн в конструкторе. Пожалуй, самый увлекательный и творческий этап разработки игры. Здесь можно много экспериментировать, подбирая наиболее подходящие компоненты.
- Когда концепция реализована, не лишним будет протестировать свой продукт и оценить все ли части дизайн-проекта реализованы.
Вперёд, к покорению виртуальных просторов!
Теперь можно подумать о том, чтобы запустить игру онлайн, например в Play Store.
Разработка компьютерных игр — увлекательное занятие. Наши курсы помогут вам реализовать вашу идею в максимально короткий срок.
Источник