Создание приложений для Android

Создание приложений для Android – занятие довольно хлопотное. Оно подразумевает хорошее знание языка JAVA (который является нативным для Андроида), умение настраивать среду разработки от Google и неплохое ориентирование в многочисленных классах, написанных для этой среды. Однако, есть и более простой способ – использование специальных игровых движков...

В статье ниже мы рассмотрим пример создания несложного музыкального симулятора средствами одного из таких популярных движков – Unity3D.

Создаем игру на Unity 3D. Руслан Тертышный

Создание приложений для Android Создаем игру на Unity 3D. Руслан Тертышный
Язык:Русский
Формат:
Обновлено:2014-12-11
Автор:





Создаем игру на Unity 3D. Руслан Тертышный

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

Тыжпрограммист :)Вы играете в компьютерные игры? Если да, то, наверняка, в процессе прохождения очередного игрового блокбастера у Вас иногда возникали мысли типа: "А вот здесь, я бы сделал не так!". А хотите сами побывать в роли разработчика? Тогда, предлагаю Вам небольшое, но весьма занимательное "приключение" ;)

Что такое движок и зачем он нужен?

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

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

Суть движка в том, что он позволяет в упрощенном визуальном режиме импортировать все нужные игровые объекты, расставить их на виртуальной сцене и настроить все их параметры. То есть, задачей программиста остается только правильно написать игровую логику!

Однако, за удобство работы приходится платить некоторым увеличением размера проекта (иногда даже в несколько раз!) в сравнении с его аналогом, написанным старым "хардкорным" способом. Именно за это часть разработчиков движки не любит или же старается писать свои, в которых используются только необходимые им компоненты...

Но нам-то с Вами до труЪ-программистов далеко :) Поэтому займемся созданием несложной игры для Android на базе популярного и мощного движка Unity3D.

Начало работы с проектом в Unity3D

Итак, почему мы решили использовать именно Unity3D:

  • возможность создавать полноценные 2D и 3D игры;
  • возможность скомпилировать готовую игру под любое устройство;
  • относительная простота управления движком;
  • хорошая расширяемость функционала за счет подключения плагинов;
  • относительно небольшой размер итоговой сборки игры (в сравнении с другими движками).

Главный козырь Unity3D, естественно, его многогранность и многоплатформенность. Готовую игру (возможно, с небольшими доработками) Вы можете портировать, хоть на ПК (с Windows, Linux или MacOS), хоть на Android, хоть на PlayStation или XBox! Для этого нам потребуется скачать только сам движок, который, кстати, "весит" больше гигабайта и нужные SDK (если планируется разработка под мобильные платформы или консоли). Если Вы хотите сделать игру для Windows, то качать дополнительно ничего не нужно, но поскольку, мы собрались делать игру под Андроид, то нам понадобится скачать еще и Android SDK (Software Development Kit). Советую качать SDK в ZIP-архиве для большего удобства работы с ним.

Когда все будет загружено, можете распаковать в любую удобную для Вас папку Android SDK, а затем приступайте к установке самого Unity3D. Устанавливается он, как и любая обычная программа под Windows, поэтому проблем с установкой быть не должно. После установки движок запустится и нам для начала нужно будет создать новый проект:

Создание нового проекта

Для этого нам нужно будет закрыть все приветственные и вступительные окошки, а затем в меню "File" выбрать пункт "New Project". В открывшемся окошке (см. скриншот выше) нам предложат указать папку сохранения проекта (ее название будет совпадать с названием проекта), импортировать некоторые стандартные наборы функций (они нам не нужны) и указать режим работы. В качестве режима выбираем 2D и жмем кнопку "Create". На этом подготовительная часть работ завершена :)

Интерфейс движка и иерархия проекта

После создания проекта он будет загружен в рабочее пространство Unity3D:

Начало работы с Unity3D

Само это рабочее пространство имеет модульную структуру и состоит из нескольких вложенных окошек, которые можно перемещать, как Вам удобно. У меня оно настроено так (слева направо и сверху вниз):

  1. Окно Hierarchy – отображает иерархическое положение активных и неактивных объектов на сцене. По умолчанию единственный объект, находящийся сразу в списке – Камера (Main Camera).
  2. Окно Scene – отображает всю игровую сцену и объекты на ней (в том числе, камеры, звуки, текстуры и т.п.).
  3. Окно Inspector – отображает все свойства выбранного в иерархии или на сцене объекта и позволяет их править, дополнять или удалять.
  4. Окно Game – отображает игровой мир, который виден в камеру и позволяет выбирать размер виртуального тестового окна игры в пикселях. Также, позволяет активировать разворачивание игрового окна в полный размер (Maximize on Play) и включать/отключать отображение различной информации для разработчика.
  5. Окна Project и Console. Окно Project служит для навигации по ресурсам проекта: загруженным изображениям, звукам, моделям и т.п. Также средствами данного окна (контекстное меню) Вы можете создавать новые пустые игровые объекты разных типов и скрипты. Окно же Console служит для вывода сообщений об ошибках (красным), предупреждений (желтым) и различной, запрошенной Вами отладочной информации (серым).
  6. Окно Assets Label – нижняя часть окна инспектора, в которой отображается превью выбранного в окне Project объекта или файла.

Кроме Всего вышеперечисленного, обратите свое внимание на три кнопки вверху по центру. Они позволяют запускать Ваш проект, ставить на паузу (иногда полезно при отладке чтобы посмотреть, что делается в Иерархии, например) и, соответственно, выключать.

Создавать мы будем симулятор музыкального инструмента: индийских народных барабанов под названием "табла", поэтому для начала работы создадим в проекте две пустые папки, в которых будут храниться звуки и картинки. Создать новую папку можно, вызвав контекстное меню в окне навигатора проекта (Project) и выбрав пункт "Folder" в списке "Create".

Здесь стоит сказать пару слов о том, как нужно называть эти папки. Для простой игры, вроде нашего симулятора, в принципе, папки можно "обозвать" как угодно, однако, имеется как минимум два названия, которые лучше не использовать, поскольку они зарезервированы движком. Это названия Resources и Plugins. В больших проектах папку Resources создают сразу и все игровые "запчасти" (картинки, звуки, модели, текстуры и префабы) складируют уже в нее (сортируя по подпапкам). В Plugins же, как следует из названия, сохраняются все дополнительные сторонние наборы функций (так называемые "ассеты" (assets)), которых имеется довольно много на Asset Store – магазине расширений для Unity3D.


Импорт файлов и создание игровых объектов

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

После того, как изображения появятся в нашей папке Images их следует немного настроить:

Настройки изображений

Дело в том, что по умолчанию Unity3D все добавленные в проект картинки сжимает с потерей качества. Если такая потеря нам не нужна (особо актуально для игр с HD-графикой), то нам следует выбрать каждое изображение и в окне Инспектора изменить значение параметра "Format" с "Compressed" на "Truecolor" во вкладке "Default". Также может понадобиться изменить параметр "Max Size", если он меньше реальной ширины картинки (по умолчанию – 1024 пикселя). После всех изменений нужно не забыть нажать кнопку "Apply", чтобы применить их. Аналогичные действия при необходимости совершаем для всех остальных изображений.

Теперь, давайте создадим из наших картинок игровые объекты. Для этого достаточно просто перетащить нужное изображение в окно Hierarchy. Картинка или 3D-модель будут автоматически преобразованы в объект типа Game Object и отображены в начальной точке координат перед камерой.

Создание Game Object

Первым делом мы добавили фоновую картинку, которая должна у нас отображаться во весь экран. Проверить, так ли это, можно выделив в окне иерархии камеру и посмотрев на то, как отображается ее рамка. На скриншоте выше видно, что часть нашего фона остается вне обзора камеры, поэтому, нужно подстроить размер этого обзора при помощи перетаскивания рамки прямо на сцене или правки параметра "Size" в окне Инспектора. В нашем случае пришлось сменить значение по умолчанию (5) на 5.4.

Все, камеру больше не трогаем, а добавляем и настраиваем остальные картинки. При добавлении мы видим, что некоторые из них слишком большие для нашей игры. Уменьшить их можно либо физически в графическом редакторе, либо средствами движка. Попробуем последний способ. Для этого выделяем изображение в окне Иерархии, а в окне Инспектора изменяем значения "Scale" для координаты X и Y с 1 на 0.5 (то есть, уменьшаем вполовину). Там же желательно, во избежание накладок, присвоить всем игровым объектам (кроме фона) ненулевой порядок слоев (Order in Layer):

Регулирование размеров и очереди объектов на сцене

Последним шагом в подготовке игровых объектов из картинок будет "навешивание" на них коллайдеров (collider). В Unity3D коллайдеры используются в качестве детекторов взаимодействия между объектами. То есть, по сути, на нашу картинку надевается виртуальная оболочка, которая может регистрировать прикосновения к ней.

Чтобы добавить коллайдер на объект, выбираем его в окне Иерархии, а затем в окне Инспектора жмем кнопку "Add Component". В появившемся списке компонентов ищем Physics 2D (обычная 3D физика в нашем режиме не сработает) и там из всех вариантов нам больше всего подходит "Circle Collider 2D". Его и выбираем. Вокруг нашего объекта появится зеленая обводка, которая и отображает границы коллайдера. Осталось только отметить галочкой пункт "Is Trigger" чтобы наш коллайдер только регистрировал нажатия и больше никак не взаимодействовал с окружающим игровым пространством:

Добавление коллайдеров

Аналогичные действия повторяем для всех оставшихся объектов. Отличаться от остальных объектов будет только наш фон. Для него мы применим Box Collider 2D и выставим Position Z больше нуля, чтобы задвинуть коллайдер и сам фон на задний план (это нам пригодится чуть позже).

Работа со звуком

Со звуком в Unity 3D на первый взгляд все обстоит несколько запутано. Но, попытаемся разобраться по порядку :)

Первым делом нам нужно перетащить все звуки в папку Sounds и тоже немного их настроить:

Настройка звуков

Если уровень громкости у всех звуков у Вас изначально отрегулирован, то все, что потребуется сделать, это отключить 3D-обработку звуков. В трехмерных играх эта обработка нужна для того, чтобы имитировать приближение источника звука при приближении к нему камеры. Но в 2D нам это ни к чему, поэтому выделяем по очереди каждый звук и снимаем у него галочку "3D Sound".

Теперь можем приступать к добавлению звуков к игровым объектам. Для этого нам нужно выделить по очереди каждую кнопку и добавить ей новый компонент "Audio Source" из раздела "Audio". Когда компонент будет добавлен, выбираем соответствующий кнопке "Audio Clip" и снимаем активную по умолчанию галочку "Play On Awake" (играть при появлении):

Добавление звуков на кнопки

Когда все звуки будут прикреплены к нужным кнопкам, придет время для самого интересного – скриптинга...

Первый скрипт

Перед тем, как начать разбирать наш первый скрипт, наверное, стоит пару слов сказать о самой системе скриптинга в Unity 3D.

Юнити позволяет писать код сразу на трех языках: JavaScript (точнее, его немного модифицированной версии UnityScript), C# и Boo. В ряде книг и руководств можно встретить мнение, что для начинающих скриптинг в Unity проще осваивать на примере JavaScript. Однако, этот язык не настолько удобный, как остальные, и в будущем Вам, скорее всего, придется переучиваться. Поэтому, лучше сразу начать с изучения C# (Boo тоже неплох, но по нему мало обучающих материалов).

Теперь о том, где писать код. По умолчанию редактором кода в Unity 3D является IDE MonoDevelop. Преимущество этой среды разработки в том, что в ней имеются подсказки для быстрого ввода стандартных методов, классов и функций, а также система проверки синтаксиса. Однако, для меня минусом стала громоздкость и высокая ресурсоемкость. Благо, в настройках Unity можно установить в качестве текстового редактора, что угодно, поэтому я для себя "подвесил" легкий и функциональный Notepad++ (почти все примеры будут показаны в нем).

И последнее. Естественно, что без справочных материалов в освоении всех премудростей движка Вы далеко не уйдете, поэтому вот список из нескольких толковых Интернет-ресурсов по теме Unity 3D:

Ну и, чтобы долго не тянуть, предлагаю сразу создать первый скрипт. Под скрипты, если их много, лучше выделить отдельную папку, но у нас игра будет простенькая, поэтому мы можем создать скрипт прямо в корневой папке проекта. Для этого вызываем контекстное меню в окошке Project, выбираем список Create и жмем "C# Script". Назовем наш новый скрипт, например, Sounds и откроем его двойным щелчком мыши. Убрав стандартные методы Update и Start, а затем, прописав нужные получим следующий вид скрипта:

Скрипт озвучки нажатий

Если Вы не перенастраивали редактор, то наш скрипт будет открываться в MonoDevelop. Разберем его структуру...

Фактически каждый скрипт на C# состоит из трех основных частей:

  1. В самом верху перечисляются библиотеки, которые нужно подключить для работы скрипта (например, "using Unity.Engine" подключает работу самого движка, а "using System.Collections" – библиотеку, содержащую ряд встроенных классов для работы скрипта под разными системами).
  2. Объявление класса и переменных. В C# нет понятия скрипта, как такового. Вместо него используется понятие "класса", в который входит ряд методов и функций. Хотя, по сути, в контексте Unity 3D это практически одно и то же :) Главное помнить, что имя класса должно совпадать с именем, которое мы дали скрипту. Особенность же переменных в C# в том, что они обязательно (кроме временных, которые объявляются в самом скрипте) должны быть типизированы. На практике это означает, что для переменной должен быть указан уровень доступа (private или public) и тип (int, float, bool или, как у нас в скрипте, AudioClip. При этом имя переменной можно давать любое. А можно ей сразу и значение приписать.
  3. Набор методов и функций. Методом в C# называется практически любая функция, которая выполняет определенные действия. В принципе, в литературе по Unity 3D их и называют функциями, но, если мы говорим о C# как отдельном языке программирования, то это, таки, методы :). Функциями в чистом виде в Юнити являются, например, стандартные функции вывода звука, отрисовки элементов GUI и т.п., которые используются внутри методов.

Зная теперь структуру скрипта, нетрудно понять его смысл, который сводится к следующему... В классе (скрипте) Sounds мы объявляем 9 переменных типа AudioClip с нужными нам для удобства их различения именами. Делаем их обязательно публичными (приватные не будут отображаться в редакторе, а нам на них нужно будет "вешать" звуки именно через редактор). А затем в теле скрипта используем стандартный метод "void OnMouseDown()". Раньше он отвечал только за обработку клика мышью, но в новых версиях интерпретируется и как касание к сенсорному экрану. В нем пишем условия, по которым мы проверяем имена нажатых коллайдеров и, если обнаруживаем нажатие одного из них, выводим соответствующий звук (используем стандартную функцию audio.PlayOneShot();).

При написании кода внимательно следите за наличием всех открывающих и закрывающих скобок иначе будете постоянно получать отчеты об ошибках в Консоли и не сможете запустить свой проект вообще! Также обращайте внимание на использование в именах методов и функций заглавных букв. Они тоже часто бывают причинами ошибок. И, естественно, соблюдайте все знаки (точки, двоеточия и скобки), короче, синтаксис языка. Вначале будет трудно, но со временем Вы начнете писать с нуля без ошибок!

Когда скрипт будет готов, выделите его и в окне Инспектора назначьте каждой переменной свой звук. Теперь нам осталось только применить наш скрипт к объектам на сцене. Проще всего это сделать, опять же, посредством перетаскивания скрипта прямо на нужный игровой объект в списке Иерархии:

Применение скрипта

Если скрипт был перетащен правильно, то он должен появиться в окне Инспектора у того объекта, на который мы его перетащили. Соответственно, перетаскиваем скрипт на все объекты, которые должны звучать в игре и можем пробовать запускать ее. При нажатии по нашим игровым кнопкам теперь, наконец-то, будет звучать заданный звук!

Введение в GUI

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

Собственно, GUI и есть сокращение от англ. "Graphical User Interface", то есть графический интерфейс пользователя. Традиционно он включает в себя такие компоненты, как:

  • кнопки;
  • окна;
  • текстовые области;
  • чекбоксы и/ил радиокнопки;
  • слайдеры (полосы прокрутки) и т.п.

В Unity 3D Все это (и даже кое что сверх того) присутствует в полной мере. Главное, научиться им пользоваться! Рассмотрим, как средствами GUI в Юнити можно сделать простую надпись-заголовок.

Для этого создадим новый скрипт с именем Interface и изменим его следующим образом:

Скрипт интерфейса

Рассмотрим внимательно скрипт на скриншоте. Здесь мы пишем всего одну публичную переменную нового для нас типа GUIStyle. Этот тип позволяет в визуальном режиме менять оформление элементов, к которым данный стиль приписан. Стили удобно использовать, если имеется много элементов интерфейса одного типа (например, кнопок), но у них должен быть разный вид.

В нашем примере далее мы используем стандартный метод "OnGUI()", который позволяет каждый кадр отрисовывать заданные в нем элементы интерфейса (вне метода они не работают и вызывают ошибку).

Далее мы создаем кнопку ("GUI.Button"), которая имеет следующий синтаксис: условие – 4 координаты (отступ по горизонтали от левого края, отступ по вертикали от верхнего края, ширина, высота) – видимый текст в кавычках и далее, опционально, указание стиля. Внутри условия кнопки прописываются нужные функции. В нашем случае мы прописали переход на сайт разработчиков ("Application.OpenURL("");").

Скрипты с GUI могут работать с любых игровых объектов, но обычно их советуют "вешать" на камеру, что мы и сделаем, перетащив скрипт на объект Main Camera. Теперь, если его выделить в окне Иерархии, то в окне Инспектора мы сможем увидеть публичную переменную нашего стиля, развернув которую, получим полный доступ к настройкам этого стиля!

Мы можем указать цвет текста и текстуру для фона в любых ситуациях (для кнопки нужно прописать три ее варианта (Normal - обычный вид, Hover - при наведении и Active - при нажатии), задать отступы и настроить шрифт. По умолчанию единственным доступным в Unity 3D шрифтом является Arial, однако Вы можете вручную загрузить в проект любой другой и применить его в поле "Font", настроив все сопутствующие параметры.

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

Игровой экран

Изменение интерфейса по условию и статические переменные

Мы уже сделали многое, но улучшать всегда есть куда :) Поэтому предлагаю в качестве последнего примера создать окошко справки, которым обычно нормальные разработчики снабжают свои игры и приложения. Для этого добавим в папку с изображениями картинку для такой кнопки в виде знака вопроса и сделаем из нее игровой объект. Навесим на него коллайдер и напишем скрипт с именем, например, "Help" следующего содержания:

Создание справки

В данном скрипте у нас есть две переменные. Первая переменная определяет скин, который будет использоваться для всех элементов интерфейса, описанных в данном классе. В отличие от стилей, работу с которыми мы рассмотрели выше, скины позволяют изменять вид не только отдельного элемента, к которому они приписаны, а всех элементов определенного типа сразу. К тому же, в отличие от стилей, скины к элементам не прописываются, а объявляются сразу для всего метода и работают до тех пор, пока не будет объявлен еще один скин. Также следует помнить, что скины существуют не только в виде переменных, но и как отдельные файлы. Поэтому, перед объявлением скина нужно сразу создать его в окне "Project" из контекстного меню: "Create" – "GUI Skin".

Вторая переменная у нас логическая (или по-другому булева). Она может иметь только два значения: "истина" (true) или "ложь" (false). В силу своей бинарной природы такая переменная отлично подойдет для реализации всевозможных переключателей. В нашем случае, она будет отвечать за отображение текста с описанием нашей игры.

Однако, если посмотреть внимательно, то можно заметить, что у последней переменной есть один замечательный параметр – "static". Добавление к переменным такого параметра позволяет сделать их статическими и получать к ним доступ из других скриптов!

Но вернемся к остальному коду. Уже знакомый нам метод "void OnMouseDown()" здесь будет служить переключателем переменной "isVisible" при помощи простенького условия. Однако, после условия есть еще одна функция. Функция эта ("Debug.Log();") служит для вывода "на лету" в Консоль значений нужных нам переменных (их мы вписываем без кавычек в скобках). Как видите, внутри функции можно совмещать как неизменяемый текст (пишется в кавычках), так и переменные (без кавычек). Главное, только чтобы между всеми данными был знак "+".

Далее по тексту скрипта у нас идет метод отрисовки интерфейса ("void OnGUI(){}"), внутри которого мы видим объявление нового скина ("GUI.skin = HelpSkin;") и нового элемента интерфейса типа GUI.Box. В отличие от кнопки, бокс является неактивным элементом и служит обычно для вывода различных текстовых или графических данных.

Обратите внимание на то, как мы задали позиционирование для бокса. Здесь все значения указаны не напрямую, а при помощи математических выражений, что, по сути, является аналогом "резиновой верстки" в веб-разработке. Проблема в том, что при указании точных размеров GUI-элементов при разных разрешениях экрана они не будут адаптироваться и могут быть либо слишком мелки ми, либо, наоборот, крупными. В следующей версии движка разработчики обещают сделать GUI адаптивными, но пока приходится извращаться :(

Последним шагом на пути к успеху будет настройка нашего скина. В переменную скрипта указываем файл скина, а затем выделяем этот файл в окне проекта. Как и для других файлов, настройки скина будут отображены в окне Инспектора. Здесь ищем тот элемент, который подлежит изменению (в нашем случае Box), раскрываем его и настраиваем аналогично рассмотренному выше стилю:

Настройка скина

Чтобы увидеть, правильно ли работает наш скрипт, запустим проект и попробуем нажать на кнопку справки:

Рабочая справка по игре

Сейчас все работает, но не всегда удобно нажимать кнопку справки, чтобы обратно скрыть описание. Более привычно для исчезновения всяких уведомлений ткнуть в любое свободное место, чем целиться в кнопки. И вот здесь нам как раз и пригодится то, что мы сделали переменную "isVisible" статической, а также, навешенный на фоновую картинку коллайдер...

Вернемся к нашему самому первому скрипту ("Sounds"), который отслеживал нажатия на кнопки для проигрывания звуков. В него (точнее, внутрь метода "void OnMouseDown()") нам достаточно будет прописать всего одну строчку:

if (this.name != "HelpButton"){Help.isVisible = false;}

Этой строчкой мы задаем условие: если имя нажатого коллайдера не равняется имени кнопки справки, то переменная "isVisible" в скрипте "Help" будет равняться "false". Только нужно чтобы переменная "isVisible" точно имела приписку "static", иначе получим ошибку.

Теперь при запуске мы увидим, что наше окно справки закрывается при нажатии не только на кнопку в правом верхнем углу, но и при касании к любой свободной части экрана. Единственное, что можно еще улучшить – сделать, чтоб окошко скрывалось и по нажатию на нем самом... Это будет Вашим "домашним заданием" ;) Скажу только, что ГУИ-бокс нужно будет сменить на аналогично оформленную кнопку, опять же, с настройкой скина и прописыванием функции, изменяющей переменную "isVisible". Все, дальше молчу :)

Компиляция игры и сохранение проекта

Наконец, у нас все работает! Это означает, что пришло время сохранять нашу игру и тестировать на реальном устройстве. А для этого ее нужно скомпилировать в исполняемый файл (для Windows, например, в EXE, а для Android в APK).

Если Вы хотите скомпилировать игру для ПК, то Вам не придется производить никаких предварительных настроек. Однако, для Андроида нужно будет сначала подключить скачанный нами в самом начале Android SDK. Делается это довольно просто: идем в меню "Edit", вызываем пункт "Preferences" и в открывшемся окошке переходим на вкладку "External Tools". Здесь ищем строку "Android SDK Location" и в ней указываем путь к распакованному архиву с SDK (см. скриншот ниже). Кстати, здесь же можно сменить активный по умолчанию монструозный текстовый редактор MonoDevelop на свой любимый :)

И вот настал момент истины! Идем в меню "File" и ищем там пункт "Build Settings". В открывшемся окошке нам нужно будет сразу добавить сцены для сборки. Если сцена одна (как в нашем проекте), то для этого будет достаточно нажать кнопку "Add Current". Если же их несколько, то нужно будет открыть каждую из них и аналогичным образом внести в список сцен, а затем посредством перетаскивания настроить нужную их очередность:

Сборка игры под Андроид

Следующим шагом выбираем платформу сборки (мы планируем игру под Андроид, значит, его и выбираем) и жмем внизу кнопку "Player Settings". В окне Инспектора откроется ряд настроек из которых некоторые являются обязательными или очень желательными. К желательным относится указание названий компании-разработчика, программы и ее иконки (Company Name, Product Name и Default Icon, соответственно) в верхней части списка настроек.

В нижней же части в разделе "Other Settings" имеется два обязательных параметра: "Bundle Identifier" и "Bundle Version". Версия по умолчанию проставляется, как 1.0, а вот идентификатор придется создать вручную и, желательно, уникальный. Состоять он должен из трех частей, отделенных друг от друга точками: зарезервированное слово "com", затем название компании-разработчика, а в конце название самого приложения.

Остальные настройки сборки можете менять по своему усмотрению или не менять вовсе. Главное, что теперь компиляция уже сможет запуститься. Для этого достаточно нажать кнопку "Build" в окошке "Build Settings" и дождаться, пока программ выдаст нам готовое, упакованное в APK-файл приложение :)

Заключение

На этом наш урок-обзор по созданию простейших приложений для Андроид подходит к концу. Чтобы Вы могли повторить все, о чем мы говорили, в конце статьи я дам ссылку на архив, в котором будут храниться все ресурсы игры в виде отдельной папки (если захотите сделать все с нуля) и в виде файла с расширением unitypackage. Последний позволяет импортировать в Юнити сразу весь проект, включая зависимости и т.п.

Чтобы импортировать наш проект (и, кстати, любые плагины, скачанные из Интернета или Assets Store) нужно зайти в меню "Assets", выбрать пункт "Import Package", а в нем "Custom Packege", после чего указать путь к нашему файлу и нажать кнопку "Import". Кстати, сделать полный бекап своего проекта, с сохранением в такой unitypackage Вы можете из этого же меню ("Assets") кликом по пункту "Export Package".

Вроде, все :) Как человек, который сам осваивал Unity 3D с нуля, в статье я постарался дать ответы на максимальное количество вопросов и осветить основные нюансы работы с движком, которые возникают на первых порах. Но, возможно, кому-то этого будет мало, поэтому, если у Вас возникнут вопросы, можете обращаться либо прямо ко мне на почту, либо на форуме: чем смогу – помогу!

Желаю всем удачи и успешной реализации всех проектов!

P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.

P.P.S. Если Вы не хотите вникать в тонкости программирования, но имеете желание создать собственную флеш-игру, советую ознакомиться с другим игровым движком – Stencyl:
https://www.bestfree.ru/soft/media/flash-games-creation.php







Полезный совет:


Система проверки ошибок от Mistakes.ru