Сегодня я покажу вам как воспользоваться новыми включенными в Unity 2D инструментами, чтобы создавать 2D игры.
Обзор приложения
В этом уроке вы узнаете, как создать создать мобильную 2D игру в Unity. В качестве языка программирования будет использован C#.
Цель игры состоит в том, чтобы поймать в телепортационный луч Буренок, прежде чем они достигнут безопасного сарая.
В этом проекте вы узнаете следующие аспекты разработки в Unity:
- создание 2D проекта в Unity
- ознакомление с интерфейсом Unity
- создание префаба
- добавление скриптов к игровым объектам
- обработка столкновений
- использование таймеров
- работа со звуком
Создание проекта в Unity
Загрузите Unity и выберите New Project в меню File меню, чтобы открыть новый диалог проекта. Выберите каталог для вашего проекта и установить настройки по умолчанию для 2D.Open
Настройки
На следующем этапе вы познакомитесь с интерфейсом Unity. Создайте проект на мобильных разработок, щелкнув на Build Settings в меню File и выбрав нужную вам платформу для вашей будующей игры.
В Unity можно создавать игры под iOS, Android, BlackBerry и Windows Phone 8. Поскольку мы собираемся создать 2D игры, первое, что мы должны сделать после выбора платформы, - это выбрать размер картинок, которые мы будем использовать в игре:
iOS:
- iPad без Retina: 1024px x 768px
- iPad с Retina: 2048px x 1536px
- 3.5" iPhone/iPod Touch без Retina: 320px x 480px
- 3.5" iPhone/iPod с Retina: 960px x 640px
- 4" iPhone/iPod Touch: 1136px x 640px
Поскольку Android является открытой платформой, существует множество устройств различными разрешениями экрана и плотности пикселей. Некоторые из наиболее распространенных из них перечислены ниже:
- Asus Nexus 7 Tablet: 800px x 1280px, 216 ppi
- Motorola Droid X: 854px x 480px, 228 ppi
- Samsung Galaxy SIII: 720px x 1280px, 306 ppi
Для Widows Phone и BlackBerry:
- Blackberry Z10: 720px x 1280px, 355 ppi
- Nokia Lumia 520: 400px x 800px, 233 ppi
- Nokia Lumia 1520: 1080px x 1920px, 367 ppi
Но, даже если мы будем концентрироваться на платформе iOS в этом уроке, игру можно будет воспроизвести на любой другой платформе.
Экспорт изображений
В зависимости от того устройства, на которое вы ориентируетесь, вам может потребоваться преобразовать изображения до рекомендуемого размера и плотности пикселей. Вы можете сделать это в вашем любимом графическом редакторе.
Интерфейс Unity
Не забудьте нажать кнопку 2D в панели Scene. Вы также можете изменить разрешение, которое используется для отображения сцены, на панели Game.
Игровой интерфейс
Игровой интерфейс нашей игры довольно будет простым. Вы можете найти изображения и скрипты в исходных файлах, прилагаемых к этому уроку.
Языки программирования в Unity
Вы можете использовать один из трех языков программирования, которые поддерживает Unity: C#, UnityScript , который по синтаксису похож на JavaScript и Boo. Каждый язык имеет свои плюсы и минусы и только от вас зависит на каком языке создавать свою игру. Мне больше нравится C#, так что его и будем использовать.
Если вы хотите программировать на другом языке, то обратитесь к Unity's Script Reference для изучения.
Прежде чем мы начнем кодирование, нам нужно добавить наши ассеты в проект Unity. Есть несколько способов сделать это:
- выбрать Import New Asset из меню Assets
- добавить детали в папку assets в проектеt
- перетащить ассеты в окно проекта
После завершения этого шага, вы должны увидеть ассеты вашего проекта в папке Assets в панели Project.
Создание сцены
Мы готовы создать сцену нашей игры путем перетаскивания объектов в панель Hierarchy (Иерархия) или Scene (Сцена).
Фон
Перетащите фон (файл gameBg.png
) в панель Hierarchy панели. Затем он должен появиться в панели Scene.
Поскольку вкладка Scene (Сцена) установлена в режим 2D, вы можете выбрать Основную камеру (Main Camera) в панели Иерархия, при этом вы увидете то, что камера будет отображать. Вы также можете увидеть это переключившись из вкладки Сцена во вкладку Game (Игра). Чтобы вся сцена видна, измените параметр Size (Размер) для Основной камеры на 1.6 в панели Inspector (Инспектор).
Летающая тарелка
Корабль в нашей игре является статическим элементом и игрок с ним никак не взаимодействует. Расположим его в центре сцены, для этого просто ппертащите летательный аппарат из папки Assets, находящейся в панели Project, на вкладку Scene. Точно также как и с НЛО перенесем на сцену сарайчик для наших коровок и расположим его так, как показано на скриншоте:
Коллайдер сарая
Чтобы убедиться, что сарай реагирует на столкновение с коровой когда она пытается войти внутрь – нужно добавить один компонент, а точнее Box Collider 2D.
Выберите сарай в сцене и во в вкладке Inspector нажмите на кнопку Add Component (добавить компонент). Из списка компонентов выберите раздел Physics 2D , а в нем Box Collider 2D. Убедитесь в том, что напротив параметра Is Trigger стоит галочка. Если ее нет - поставьте.
Мы хотим, чтобы наш триггер срабатывал, корова попадала на дверь сарая, поэтому мы должны сделать коллайдер поменьше. Перейдите на вкладку Inspector и измените значения коллайдера напротив Size (высота и ширина коллайдера) и Center (координаты центра коллайдера) так, чтобы он располагался поближе к двери сарая. У меня это получилось примерно так:
Скрипт для обработки столкновений
Настало время написать наш первый код. Нам нужен скрипт, который заставлял бы приложение реагировать на столкновение всякий раз, когда корова входит в сарай. Выберите сарай и нажмите на кнопку Add Component в панели Inspector. Выберите New Script назовите его OnCollision
. Незабудьте поменять язык на C#.
Откройте вновь созданный файл и добавьте следующий фрагмент кода:
using UnityEngine;
using System.Collections;
public class OnCollision : MonoBehaviour
{
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.name == "cow(Clone)")
{
/* Проиграть крик о помощи */
audio.Play();
/* Уничтожим корову */
Destroy(other.gameObject);
}
}
}
Сниппет реагирует на столкновение между объектами, к которым привязан скрипт, сараем и объектом под именем cow(Clone)
- один из экземпляров коровы, префаб которой мы создадим позже. Когда происходит столкновение, проигрывается звук и объект корова разрушается.
Добавляем звук
Для воспроизведения звука, когда корова попадает в сарай, нужно для начала прикрепить этот звук к сараю. Щелкните мышью на сарае во вкладке Hierarchy или на самой сцене (вкладка Scene), нажмите кнопку Add Component во вкладке Inspector и выберите в разделе Audio пункт Audio Source. Мы только что добавили компонент Audio Source. Теперь нам нужно связать с ним наш звуковой файл. Щелкните на кружочке справа от пункта Audio Clip и выберите звук barn. Снимите галочку напротив Play on Awake
Вы можете увеличить размер значков в пользовательском интерфейсе Unity (Gizmos), нажав на Gizmos в вкладке Scene и отрегулировав положение ползунка.
Космический луч
Перетащите изображение с космическим лучем из вкладки Assets на сцену и добавьте коллайдер к нему (как это делать вы уже знаете). Это необходимо для обнаружения столкновения луча с нерасторопными коровамии. Убедитесь, что переключатель Is Trigger включен.
Скрипт луча
Создайте новый скрипт, повторяя шаги, проделанные ранее. Назовите скрипт Bullet и напишите в нем следующий код:
using UnityEngine;
using System.Collections;
public class Bullet : MonoBehaviour
{
public AudioClip cowSound;
// Используется для инициализации
void Start()
{
renderer.enabled = false; /* Делает объект невидимым */
}
// Обновлять каждый кадр
void Update()
{
/* Обработка нажатия на правую кнопку мыши или касание экрана */
if (Input.GetButton("Fire1"))
{
renderer.enabled = true; /* Делает объект видимым */
/* Проиграть звук выстрела из корабля лучем */
audio.Play();
}
if (renderer.enabled == true)
{
transform.position += Vector3.down * (Time.deltaTime * 2);
}
/* Check for out of bounds */
if (this.transform.position.y < -1.5)
{
transform.position = new Vector2(0.08658695f, 0.1924166f); /* Возвращаем в исходное положение */
renderer.enabled = false;
}
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.name == "cow(Clone)")
{
AudioSource.PlayClipAtPoint(cowSound, transform.position);
/* Уничтожаем корову */
Destroy(other.gameObject);
transform.position = new Vector2(0.08658695f, 0.1924166f); /* Возвращаем в исходное положение */
renderer.enabled = false;
}
}
}
Здесь много кода, но он вовсе не сложный. Давайте посмотрим, что происходит. Сначала мы создаем экземпляр AudioClip
под названием cowSound
, который мы будем использовать для хранения аудиофайла. Это еще один вариант проигрывания звука, если вы не хотите привязывать к объекту два аудиокомпонента. Мы объявили переменную как публичную, поэтому мы можем получить к ней доступ из вкладки Inspector. Нажмите на маленькую точку справа от cowSound и выберите аудиофайл cowSound.
Затем мы сделали луч невидим, отключив его визуализацию. Мы используем один и тот же объект, чтобы сэкономить ресурсы. Этот момент является очень важным для оптимизации под маломощные устройства.
Мы обнаруживаем касания экрана, делаем луч видимым и воспроизводим звук луча (см. ниже). Когла наш луч становится видимым, он начинает двигаться вниз чтобы попасть в корову.
Также мы предусмотрели проверку не оказался ли наш луч за границами сцены. Если это так, то мы возвращаем его на место и наше НЛО пожет стрелять снова (проверьте значения х и у луча в Инспекторе).
Последняя часть проверяет коснулся ли луч коровы. Если это произойдет, то проигрывается звук и корова исчезает. Затем луч снова делается невидимыми, перемещается в исходное положение и НЛО готово к стрельбе снова.
Добавляем звук для луча
Чтобы добавить звуковое сопровождение к нашему космическому лучу необходимо выбрать во вкладке Hierarchy или Scene наш лучик и нажать на кнопку Add Component во вкладке Inspector. Выберите Audio Source из раздела Audio. Снимите галочку с Play on Awake и нажмите маленькую точку справа от Audio Clip, чтобы выбрать звуковой файл по имени bizzed.
Добавляем корову
Перетащите нашу буренку из панели Assets на вкладку Сцена так, как показано на рисунке ниже:
Rigid Body 2D
Чтобы столкновение было зарегистрировано, вы должны проассоциировать компонент RigidBody2D хотя бы с одним из участвующих в нем объектов. Поскольку корова может столкнуться и с сараем, и с лучом, лучше всего добавить компонент к корове. Выберите нашу Буренку и нажмите на кнопку Add Component (Добавить компонент) во вкладке Inspector (Инспектор). Выберите пункт Physics 2D, а в нем RigidBody2D. Мы только что добавили компонент RigidBody2D. Установите в нем параметр Gravity Scale равным нулю:
Коллайдер коровы
Мы также должны привязать к корове коллайдер (как это делать вы уже знаете), чтобы определять столкновения с сараем и лучом. Не забудьте поставить галочку в чекбоксе Is Trigger в Inspector.
Скрипт движения коровы
Создайте скрипт, который будет отвечать за перемещение коровы и напишите в нем следующий код:
using UnityEngine;
using System.Collections;
public class MoveCow : MonoBehaviour
{
public Vector3 moveSpeed;
public float spawnTime = 2f;
public float spawnDelay = 2f;
// Используется для инициализации
void Start()
{
moveSpeed = Vector3.left * Time.deltaTime;
InvokeRepeating("ChangeSpeed", spawnDelay, spawnTime);
}
void ChangeSpeed()
{
moveSpeed = new Vector3(Random.Range(-1, -2), 0, 0) * 0.05f;
}
// Обновлять каждый кадр
void Update()
{
transform.position += moveSpeed;
}
}
Класс MoveCow
анимирует корову во время ее движения на экране с помощью переменной moveSpeed
. Метод InvokeRepeating
изменяет скорость коровы, заставляя ее пускаться галопом начиная с того момента, когда она достигает центра сцены. Это делает игру более сложной.
Создаем префаб для коровки
Теперь, когда мы привязали к корове все необходимые компоненты, пора конвертировать ее в префаб.
"Префаб – это GameObject для многократного использования, который хранится в Project View. Префаб может быть вставлен в любое количество сцен, несколько раз. Когда вы добавляете префаб в сцену, вы создаете его экземпляр. Все экземпляры префаба связаны с оригинальным префабом и, по сути, являются его клонами. Независимо от того, сколько копий вы создали для своего проекта, любые изменения, коснувшиеся оригинального префаба, будут применены ко всем его экземплярам".
Для преобразования коровы в префаб, перетащите корову из вкладки Иерархия в панель Assets. В результате название в Hierarchy станет синим.
Преобразование корову в префаб позволяет нам использовать его, что очень удобно как он уже содержит необходимые компоненты.
Скрипт Spawner
Скрипт Spawner отвечает за отображение коров. Откройте MonoDevelop или ваш любимый C#-редактор и создайте новый скрипт:
using UnityEngine;
using System.Collections;
public class Spawner : MonoBehaviour
{
public float spawnTime = 2f;
public float spawnDelay = 2f;
public GameObject cow;
// Используется для инициализации
void Start()
{
InvokeRepeating("Spawn", spawnDelay, spawnTime);
}
void Spawn()
{
/* Создание экземпляра коровы */
GameObject clone = Instantiate(cow, transform.position, transform.rotation) as GameObject;
}
}
Мы используем метод InvokeRepeating
для клонирования коров с применением значений, установленных для spawnTime
и spawnDelay
. GameObject
cow
установлен на значение public
и создан с использованием Inspector. Нажмите на маленькую точку справа и выберите префаб коровы.
Spawner Game Object
Чтобы создать несколько экземпляров префаба коровы, используйте график коровы, который мы добавили к сцене несколько минут назад. Выделите ее и удалите ее компоненты. Затем добавьте скрипт Spawner.
Тестирование
Настало время протестировать нашу игру. Нажмите на Command + P
для запуска игры в Unity. Если все работает как надо, вы готовы к заключительному шагу.
Настройки плеера
После успешного тестирования, можно сосредоточиться на настройках плеера. Выберите Build Settings из меню меню File и нажмите на кнопку Player Settings (настройки плеера). Теперь можно настроить параметры для вашего приложения, например Иконку приложения (Icon) или Картинку-заставку (Splash Image), которая показывается при запуске приложения. Используйте графические редакторы чтобы создать красивый значок для вашей игры. Unity покажет в разделе Иконки (Icon) вам необходимые размеры, которые зависят от вашего приложения.
Публикация
После того, как ваш проект сконфигурирован, вернитесь в Build Settings и нажмите кнопку Build. Вот и все, что нужно, чтобы создать свою игру для тестирования или игры на мобильных устройствах.
Xcode
Если вы делаете игры для iOS, вам понадобится Xcode, чтобы скомпилировать конечный двоичный код для приложения. Откройте проект Xcode и выберите Build из меню Product.
Заключение
В этом уроке мы узнали о новых 2D возможностях Unity, обнаружение столкновений и другие аспекты разработки игр под Unity.
Поэкспериментируйте с результатом и поменяйте конфигурацию, чтобы создать собственную игру. Надеюсь, эта статья вам помогла.