Как сделать мобильное управление в unity3d

Добавил пользователь Skiper
Обновлено: 01.09.2024

Представляем вам курс по созданию мобильной 2D игры на Андроид. Игра будет создана на движке Unity. В игре мы реализуем множество концепций игрового движка и познакомимся с разработкой игр на нем.

Видеоурок

Ссылки из видео:

Unity – это движок, на котором строится большая часть современных игр на разных платформах. Посредством движка реально создавать игры, ориентированные на запуск на компьютерах (Windows, Linux, MacOS), мобильных телефонах, планшетных компьютерах (Android, iOS) и даже игровых приставках PlayStation, Xbox, Nintendo.

Как создавать игры в Unity?

В основе Unity лежит компонентно-ориентированная концепция. По сути, любая игра состоит из массы объектов, разбавленных дополнительными компонентами. Для примера, во время создания платформера мы создаём GameObject, к нему дополнительно прикрепляем графическую составляющую, что отвечает за отображение персонажа, и управляющий компонент, он обеспечивает управление персонажем за счёт мыши, клавиатуры, джойстика или тачскрина. Движок не накладывает ограничения на количество подобных модулей. К GameObject можем добавить столько компонентов, сколько будет необходимо. Вся работа на движке строится на том самом создании GameObject и применение к ним подходящих компонентов.


Поддерживаемые платформы

Многие крупные проекты предпочитают Unity из-за огромного списка платформ совместимых с движком. Готовое приложение реально запустить на любой компьютерной операционной системе, популярных мобильных платформах и SmartTV. Что уж говорить, даже браузерные игры и приложения для специфических платформ (вроде Tizen OS) преимущественно разрабатываются на Юнити.

Однако, здесь не всё так гладко. При необходимости можно писать специфические алгоритмы, основанные на низкоуровневом коде, под тот же самый Андроид нужно иметь доскональные знания Java.


То же самое справедливо и в отношении iOS. Ещё одна особенность iOS, что под неё разрабатывать возможно только с компьютера или планшета от Apple. При отсутствии Macbook или аналогичного устройства выпуск игры быстро застопорится и Unity здесь вовсе не причём, Apple сама накладывает подобное ограничение. Вывод прост: если в планах есть iOS-разработка, заранее следует подобрать подходящее устройство для сборки.

Как и где разработать игру на движке?

Длительный процесс разработки игр можем проводить как в рамках Windows, так и Mac OS X. Уже существуют версии редактора под Linux, но рассчитывать на стабильную их работу пока что не приходится. Большую часть времени по созданию игры разработчик проводит внутри редактора Unity. Ещё приходится много времени писать код скриптов, его создавать можем либо в стандартном MonoDevelop, либо в любом редакторе стороннего разработчика. Сейчас активно пользуются Visual Studio, а также Sublime Text, но только при должной настройке.


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

Unity не только активно развивающийся, но и очень активно изменяющийся продукт. Замена рендер пайплайнов, UIElements, New Input System - всё это изменения последнего времени, которые призваны сделать движок ещё более быстрым, гибким и дружелюбным. История знает много примеров, когда компании предпринимали рефакторинг больших систем внутри своих продуктов, результатом таких изменений становились как новые успехи в их развитии, так и крах. Отбросив печальные размышления на эту тему, посмотрим, чем же новая система отличается от старой.

На смене поколений

Новая система управления это довольно заметное событие в мире Unity, комьюнити встретило её с очень большим энтузиазмом, обычно приговаривая, что текущая версия не очень удобна. Да и сама компания изготовитель разделяет это мнение и заявляет, что старая система была разработана до добавления большого количества поддерживаемых устройств и не очень была на них рассчитана. В результате интернет содержит довольно большое количество обзоров, которые обычно показывают настройку базового окна нового Action Asset, его сразу можно узнать по трём большим, горизонтально расположенным, блокам настроек. Мы же попробуем пойти в обратном направлении и сначала разберёмся в базовых элементах новой системы, а от них перейдём к более высокоуровневым.

Документация

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

Установка

Package Manager

Так как пакет с новой системой управления вышел в релиз его легко найти в Package Manager поиском по названию Input System .

Warning

Во время установки вас уведомят о том, что у вас выключен native platforms backend и ничего не будет работать, пока вы не переключитесь на него, потеряв при этом доступ к текущему API.

Settings

Не очень понятно зачем они так пугают неокрепшие умы, так как в настройках Edit > Project settings… > Player > Other Settings > Active Input Handling* есть возможность включить сразу оба. Так что не очень важно как вы ответите на вопрос про отключение, вы можете сразу переключить backend в любое подходящее вам значение. =)

Встроенные примеры

Samples

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

Архитектура

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

Если же описать архитектуру в двух словах, то она состоит из 3х уровней:

  • Нативный бэкэнд - предоставляется текущей платформой и фактически не является частью новой системы ввода
  • Низкоуровневый слой - обменивается с бэкэндом информацией в виде эвентов и необработанных данных и сильно заточен на оптимизацию работы с памятью и производительность
  • Высокоуровневый слой - представляет низкоуровневые данные в удобном для настройки и использования виде

Отдельно стоит отметить, что новая система полностью построена на эвентах и всячески подталкивает к их использованию.

Input.GetMouseButtonDown(0)

Думаю, что не многие настраивают управление в начале разработки или при тестировании очередной механики, поэтому первым делом хотелось бы узнать, как отловить обычный клик мышки из кода. В новой системе вызов Input.GetMouseButtonDown(0) превратился в Mouse.current.leftButton.wasPressedThisFrame , как можно заметить количество символов немного увеличилось, с другой стороны, теперь можно не вспоминать, под каким индексом идёт левая кнопка, а если автодополнение в вашей IDE понимает чего вы хотите, то разница будет совсем незначительной. Такой же подход используется для доступа к клавиатуре, например, отпускание кнопки пробел на клавиатуре Keyboard.current.spaceKey.wasReleasedThisFrame .

InputAction

Использование прямого доступа к кнопкам не является основным методом работы с новой системой. Базовым понятием в ней являются объекты типа InputAction, по сути, это абстракция над источниками событий(кнопки, стики и т.п.), которая предоставляет данные об их состоянии(нажата ли кнопка или направление стика) и с помощью эвентов оповещает об их изменении. Лучше всего относиться к ним как к логическим элементам(прыжок или выстрел) и не привязываться к физическим свойствам, таким как нажатие кнопки.

Input action

Пример вида, добавленного в компонент InputAction:

Action Settings

Настройка InputAction предоставляет выбор таких параметров:

Action Type может быть трёх типов:

  • Value - стандартный тип, используется для любого типа ввода, постоянно отслеживающий состояние устройств
  • Button - отличается от Value тем, что может быть связан только с кнопками и используется для отслеживания изменения состояния
  • Pass-Through - в отличие от других типов не используют схему started-performed-canceled(основные типы эвентов) и фактически всегда находится в состоянии performed, его удобно использовать в случае необходимости обработки всех данных с нескольких источников событий

Control Type - описывает тип данных предоставляемых устройством, например, в случае со стиком можно получить данные в виде структуры Vector2.

Interactions - предоставляют возможность настройки специфических действий, допустим, долгого нажатия или мультиклика.

Processors - добавляют постобработку данных поступающих от контроллера перед выдачей их логике, например, нормализацию вектора направления стика на контроллере.

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

Bindings

Также предоставляется доступ к нескольким композитным устройствам, например, направление движения можно получить в виде вектора, получаемого при помощи четырёх кнопок(WSAD или другой комбинации). Набор композитных устройств можно дополнить при необходимости своими, подробнее об этом можно прочитать в документации.

Использование InputAction не требует каких-то дополнительных сущностей и вполне подходит для использования в компонентах, только не стоит забывать, что при создании они находятся в выключенном состоянии и требуют отдельного включения через вызов метода Enable() .

Action Maps

Это объединение нескольких InputAction, которое отвечает за разные наборы действий в игре. Допустим, в меню, с помощью стика на контроллере, вы перемещаетесь между разными кнопками интерфейса, а в игре стик отвечает за перемещение персонажа.

Control Schema

Это абстракция над InputAction которая позволяет задавать разные триггеры для этих самых действий в зависимости от используемых физических устройств. Допустим, управление передвижением с клавиатуры осуществляется через WSAD, а с контроллера через левый стик.

Action Asset

Action Asset

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

Итого

Фактически вся новая система вертится вокруг наборов InputAction, а всё остальное призвано структурировать работу с ними. В результате можно выделить четыре основных подхода к использованию новой системы:

  • Обращение к данным устройства напрямую - как в случае с Mouse.current.leftButton.wasPressedThisFrame
  • Использование базовых InputAction
  • Генерация класса с набором InputAction из Action Asset, что сильно упрощает настройку сложных систем управления, использующих разные схемы
  • Использование Action Asset через объект PlayerInput

Как можно заметить Action Asset вовсе не является необходимым условием для настройки управления и служит лишь для упрощения работы с действительно большими и сложными решениями.

Изменение управления

В предыдущей статье мы рассматривали шаблон “Команда”, который обычно используют для добавления возможности перенастройки управления в игре. Использование этого подхода в новой системе фактически добавит лишний слой абстракции над InputAction, так как они уже являются логическими элементами. В свою очередь, изменение управления становится не очень очевидным и реализуется через класс с подозрительным названием InputActionRebindingExtensions. По этой теме есть отдельный пункт в документации и довольно сложный пример под названием Rebinding UI, который поставляется с пакетом. Так как это очень важный элемент для системы управления, то мы рассмотрим его минималистичную реализацию ниже.

Практика

Примеры с полноценным созданием Action Asset довольно часто встречаются на просторах интернета и не имеет смысла повторять их ещё раз, так что, в качестве минималистичного примера, изменим управление магом из наших предыдущих статей на использование новой системы с применением InputAction, а также добавим возможность перенастройки управления.

Реализация

Input Handler

Для базового использования InputActions не требуется какой-либо дополнительной настройки кроме добавления кнопок

Action Settings

Результат

Для первого запуска заклинания используется левая кнопка мышки, а второй выстрел происходит после перенастройки действия на кнопку клавиатуры f

Заключение

Изначально работа с новой системой вызывает ассоциации с добавлением кастомного редактора на какой-нибудь компонент, как, например, в нашей статье о редакторе цветов для генератора Шума Перлина. Но понимание что это очень большое изменение текущего подхода и переход на совершенно новое api приходит очень быстро. Большой набор возможностей и новых компонентов может отпугнуть, но довольно неплохая для первой версии документация и примеры позволяют надеяться на быстрое погружение для её полноценного использования, если, конечно, текущие ограничения не являются для вас большой преградой. Надеюсь, эта статья немного прояснила для вас основы работы с New Input System. Пока! =)

Мобильное управление для MFPS 2.0, это дополнение имеет все необходимое для ввода управления МФУ 2.0 на мобильных платформах, используя стандартные сенсорные элементы управления играми FPS, позволяющие играть на устройствах iOS и Android текущего поколения.

Используя систему UGUI, которую вы можете настроить на свой вкус и потребности, вы можете попробовать, прежде чем покупать здесь:

особенности:
Система UGUI
Протестированы Android и IOS.
Джойстик
Сенсорная панель
Кнопки переключения оружия
Значок Текущего Оружия
Автоматический огонь из оружия.
Легко настраивается


Обновлено до версии: 1.4.5
За обновление спасибо пользователю Inforce!

Unity является очень известным движком среди инди-разработчиков. По сути, это кроссплатформенный движок, который позволяет разрабатывать 3D— и 2D-игры. Особенностью, которая выделяет Unity среди остальных движков, является низкий порог вхождения для новичков при наличии богатого инструментария для профессионалов. Кроссплатформенность же позволяет разрабатывать приложения под любую платформу, начиная с десктопных игр и заканчивая мобильными.

Отдельно стоит сказать про систему подписки, поскольку Unity не является полностью бесплатным продуктом. Существует несколько видов подписок:

  • Personal. Бесплатная версия, которая содержит все основные функции движка. Имеет следующее ограничение: доход в год или объём привлечённых средств не должен превышать 100000$.
  • Plus. За 35 долларов в месяц предоставляются различные отчёты и аналитика, а также возможность изменять заставочный экран, 20%-ая скидка на покупки в Asset Store и различные мелкие преимущества. Имеет следующее ограничение: доход за год или объём привлечённых средств не должен превышать 200000$.
  • Pro. За 125 долларов в месяц включает в себя все преимущества версии Plus и дополнительно профессиональный сервис и премиум-поддержку. Без ограничений по обороту или объёму средств.
  • Отдельные версии для бизнеса (используются крупными компаниями).

Таким образом, инди-разработчикам с малыми бюджетами должно быть достаточно версии Personal или Plus, в ином случае придётся оформлять подписку Pro. В данной статье воспользуемся бесплатной версией для первого запуска.

Для того, чтобы начать установку Unity, нужно перейти на сайт Unity Store, где будет предложено выбрать тип подписки. Как уже говорилось выше, выберем Personal.


Затем будет предложено принять условия использования и загрузить установщик. Также можно ознакомиться с системными требованиями для работы с Unity.



После этого останется только выбрать путь установки и начать инсталляцию Unity.

Закончив установку и запустив Unity, нам предлагается войти под своим аккаунтом.


Затем снова будет предложено выбрать подписку, всё также остановимся на Personal. В этом случае нужно будет подтвердить, что годовой доход компании составляет менее 100000$, либо что Unity используется в целях обучения.


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


Настроив Unity, мы попадаем на экран выбора\создания проекта. Здесь нужно нажать New, чтобы создать свой новый проект.


После этого в появившемся окне предлагается ввести название проекта и директорию, где он будет расположен. Также не забудьте поставить флажок на 3D, чтобы использовать редактор в 3D-режиме.


Закончив с этим, нажмите Create project, чтобы создать проект. После этого откроется окно редактора с заранее сгенерированной сценой.


Не будем пока что разбираться с тонкостями программирования и возьмём для примера готовую игру. Для этого здесь существует Asset Store, который содержит огромное количество готовых моделей, анимаций, звуков (и даже игр), как платных, так и бесплатных.

Чтобы открыть Asset Store, нужно в меню Window выбрать Asset Store (комбинация клавиш Ctrl-9).



Нажав Download и тем самым скачав его, вы можете затем импортировать себе в проект. Для этого нажмите Import, после чего появится предупреждение о том, что настройки проекта после импорта будут изменены.


Согласившись на импорт, вы увидите окно, в котором нужно выбрать, какие компоненты импортировать. Выбираем все и нажимаем Import.


После завершения импорта в обозревателе проекта вы увидите новые файлы. Это и есть файлы игры. Чтобы открыть сцену в редакторе, раскройте Flappy Bird Style — Scenes и дважды кликните по Main.


В результате в окне 3D-редактора появится сцена игры.


Вы можете проверить, как игра работает, прямо в Unity, нажав на кнопку Play над окном редактора.


Примечание: если вы пользуетесь Android Studio, то у вас уже установлены все необходимые компоненты и поэтому можно смело переходить к следующему шагу.

Для того, чтобы собрать получившуюся игру на Android, нужно установить следующие инструменты:

Для начала, необходимо изменить платформу разработки на Android. Для этого в Unity откройте меню File и выберите Build Settings.


В появившемся окне нужно выбрать Android и затем нажать Switch platform.


Переключение платформы сообщает, что мы будем собирать приложение для Android. Это означает, что когда мы будем собирать приложение, Unity будет создавать APK-файл. Переключение платформы также заставляет Unity импортировать все ассеты проект заново. Это не займёт много времени на небольшом проекте, но имейте ввиду, что в больших проектах эта операция может занять длительное время.

Теперь нам нужно указать имя пакета для приложения.

Для этого перейдём в меню Edit и выберем Project Settings — Player.


В правой части Unity откроется окно с множеством различных настроек, таких как версия приложения, целевой и минимальный SDK, выбор иконки и т.д. Здесь нам нужно в блоке Other Settings найти Identification и задать имя пакета в поле Package Name. При желании можно также изменить и другие параметры.


Теперь осталось только указать путь до Android SDK и JDK. Для этого перейдём в меню и выберем Edit — Preferences.


В появившемся окне нужно перейти в External Tools и в полях SDK и JDK указать соответствующие пути, после чего закрыть окно.


Настало время собрать своё первое приложение на Unity. Для этого нужно в меню выбрать File — Build Settings. Откроется окно, в нём нужно будет добавить сцену, которую нужно собрать. Поскольку у нас эта сцена уже открыта в редакторе, достаточно просто нажать Add Open Scenes, чтобы добавить её в сборку, после добавления вы увидите её в списке сцен.


Осталось только нажать Build, после чего Unity приступит к сборке приложения. Перед этим вам может быть предложено выбрать папку, куда будут сохраняться собранные файлы приложений, а также имя APK-файла.

В результате в папке, которую вы указали, появится собранный APK-файл, готовый к установке на эмуляторе или на реальном устройстве.

Посмотрим, что находится внутри собранного APK. Для этого воспользуемся утилитой APK Analyzer, которая входит в состав Android Studio,


Размер APK-файла в несжатом виде составляет 21,1 MB, в сжатом же 20,9 MB. Как можно увидеть из графика, большую часть объёма занимают сторонние библиотеки, добавленные Unity. Затем в assets расположены все ресурсы, которые используются в собранной сцене. Файл classes.dex содержит всего 89 классов и 479 методов.

Кроме того, если заглянуть в AndroidManifest.xml, приложение состоит из одной активности.

На этом всё. В этой статье мы научились устанавливать и настраивать Unity, а также собрали своё первое приложение на Android.

Использование Unity для разработки приложений : 6 комментариев

Какое блин *создание приложений* зачем разводить людей? Пишите сразу КАК СКОПИРОВАТЬ ИГРУ ИЗ АСЕТ СТОР ЮНИТИ! ОБНАГЛЕЛИ! ХОТЕЛ НАУЧИТЬСЯ ДЕЛАТЬ ПРИЛОЖЕНИЯ! А ТУТ: КОПИРУЙ ИЗ АСЕТ СТОР И ВСЁ!

так ты из тех кто придумывает велосипед? ) все по делу, для чайников разжевал автор!

Блять ты конченый по жизни чайник.
Это для примера!
Если такой умный сделай игру RealLife которую никто ни когда не сделает!

скажите пожайлуста как сделать кнопки,для управления

Сударь. Вам на примере показали, как создать и перенести из Unity в Android свой проект. Если вы, сударь, не умеете кодить или, хотя бы, блочно создавать объекты с функциями, условиями и событиями, то вам эта статья и не посвящалась. Вы и так не заплатили ни копейки автору, чтоб это почитать, поэтому единственный, кто тут обнаглел — Вы, сударь.

Читайте также: