Статьи

Работа с 2D-инструментами Unity

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

В этом руководстве вы узнаете, как создать 2D-проект Unity и создать мобильную игру с использованием C # и Unity.

Цель игры — выстрелить телепортирующимся лучом в коров, прежде чем они смогут добраться до безопасности сарая.

В этом проекте вы изучите следующие аспекты разработки Unity:

  • настройка 2D проекта в Unity
  • знакомство с интерфейсом Unity
  • создание префаба
  • прикрепление скриптов к игровым объектам
  • работа с физическими столкновениями
  • используя таймеры

Откройте Unity и выберите « Новый проект» в меню « Файл», чтобы открыть диалоговое окно нового проекта. Выберите каталог для вашего проекта и установите   Установите значения по умолчанию для 2D.


На следующем шаге вам представлен интерфейс Unity. Настройте проект для мобильной разработки, выбрав « Настройки сборки» в меню « Файл» и выбрав нужную платформу.

Unity может создавать приложения для iOS, Android, BlackBerry и Windows Phone 8, что прекрасно, если вы планируете создать мобильную игру для нескольких платформ.


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

IOS:

  • iPad без сетчатки: 1024 x 768 пикселей
  • iPad с сетчаткой : 2048px x 1536px
  • 3,5 «iPhone / iPod Touch без сетчатки: 320px x 480px
  • 3,5 «iPhone / iPod с сетчаткой : 960px x 640px
  • 4 «iPhone / iPod Touch: 1136 пикселей x 640 пикселей

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

  • Asus Nexus 7 Tablet: 800px x 1280px, 216 ppi
  • Motorola Droid X: 854 x 480 пикселей, 228 ppi
  • Samsung Galaxy SIII: 720px x 1280px, 306 ppi

А для вдов телефон и BlackBerry:

  • Blackberry Z10 : 720px x 1280px, 355 ppi
  • Nokia Lumia 520 : 400 пикселей на 800 пикселей, 233 пикселей на дюйм
  • Nokia Lumia 1520 : 1080px x 1920px, 367 ppi

Несмотря на то, что в этом руководстве мы сосредоточимся на платформе iOS, этот код можно использовать для работы с любыми другими платформами.


В зависимости от целевого устройства вам может потребоваться преобразовать иллюстрацию в рекомендуемый размер и плотность пикселей. Вы можете сделать это в вашем любимом графическом редакторе. Я использовал функцию « Настроить размер …» в меню « Инструменты» в приложении предварительного просмотра OS X.


Обязательно нажмите кнопку 2D на панели « Сцена» . Вы также можете изменить разрешение, которое используется для отображения сцены на панели « Игра» .


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


Вы можете использовать один из трех языков в Unity, C # , UnityScript , языке, похожем на JavaScript с точки зрения синтаксиса, и Boo . У каждого языка есть свои плюсы и минусы, но вам решать, какой из них вы предпочитаете. Я предпочитаю синтаксис C #, поэтому этот язык я буду использовать в этом уроке.

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


Unity стала отличной платформой для создания 3D-игр для различных платформ, таких как Microsoft Xbox 360, Sony PS3, Nintendo Wii, Интернет и различные мобильные платформы.

Несмотря на то, что всегда было возможно использовать Unity для разработки 2D-игр, только в выпуске Unity 4.3 была включена нативная поддержка 2D. На следующих шагах мы научимся работать с изображениями в качестве спрайтов вместо текстур.


Я буду использовать несколько звуков, чтобы улучшить игровой опыт. Звуковые эффекты, используемые в этом руководстве, можно найти на Freesound.org .


Прежде чем мы начнем кодировать, нам нужно добавить наши активы в проект Unity. Есть несколько способов сделать это:

  • выберите Импортировать новый актив в меню Активы
  • добавить элементы в папку активов в вашем проекте
  • перетащите активы в окно проекта

После выполнения этого шага вы должны увидеть активы в папке « Ресурсы » вашего проекта на панели « Проект» .

Мы готовы создать сцену нашей игры, перетаскивая объекты на панель Иерархия или Сцена .


Начните с перетаскивания фона на панель Иерархия . Затем он должен появиться на панели « Сцена» .

Поскольку панель « Сцена» настроена на отображение 2D-вида, вы заметите, что при выборе основной камеры в иерархии отображается предварительный просмотр того, что будет отображаться камерой. Вы также можете увидеть это в представлении игры. Чтобы сделать видимой всю сцену, измените значение Размер основной камеры на 1.6 на панели « Инспектор» .


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


Выберите сарай на панели « Ресурсы» и перетащите его на сцену. Расположите его, как показано на скриншоте ниже.


Чтобы убедиться, что сарай уведомляется, когда корова попадает в него — входит в сарай, — нам нужно добавить компонент, Box Collider 2D, если быть точным.

Выберите сарай на сцене, откройте панель « Инспектор» и нажмите « Добавить компонент» . В списке компонентов выберите Box Collider 2D из раздела Физика 2D . Обязательно установите флажок « Триггер» .

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


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

Выберите сарай и нажмите кнопку « Добавить компонент» на панели « Инспектор» . Выберите New Script и назовите его OnCollision . Не забудьте изменить язык на C #.

Откройте только что созданный файл и добавьте следующий фрагмент кода.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
using UnityEngine;
using System.Collections;
 
public class OnCollision : MonoBehaviour
{
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.name == «cow(Clone)»)
        {
            /* Play the save cow sound */
            audio.Play();
            /* Destroy the cow */
            Destroy(other.gameObject);
        }
    }
}

Фрагмент проверяет наличие столкновения между объектом, с которым связан скрипт, сараем и объектом с именем cow(Clone) , который будет экземпляром Prefab для коровы, который мы создадим позже. Когда происходит столкновение, воспроизводится звук и объект коровы уничтожается.


Чтобы воспроизвести звук, когда корова попадает в сарай, нам сначала нужно прикрепить звук к сараю. Выберите его в представлении « Иерархия» или « Сцена» , нажмите кнопку « Добавить компонент» на панели « Инспектор» и выберите « Источник звука» в разделе « Аудио ».

Снимите флажок Play on Awake и нажмите маленькую точку справа под значком шестеренки, чтобы выбрать звук сарая.

Вы можете увеличить размер значков в пользовательском интерфейсе Unity (gizmos), щелкнув Gizmos на панели « Сцена» и отрегулировав положение ползунка.


Перетащите лучевую графику с панели « Ресурсы» на сцену и добавьте к ней коллайдер. Это необходимо для обнаружения столкновения с несчастливой коровой. Проверить Опция « Триггер» на панели « Инспектор» .

Создайте новый скрипт, повторив шаги, которые я обрисовал несколько минут назад. Назовите скрипт Bullet и замените его содержимое следующим фрагментом кода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using UnityEngine;
using System.Collections;
 
public class Bullet : MonoBehaviour
{
    public AudioClip cowSound;
 
    // Use this for initialization
    void Start()
    {
        renderer.enabled = false;
    }
     
    // Update is called once per frame
    void Update()
    {
        /* Get main Input */
        if (Input.GetButton(«Fire1»))
        {
            renderer.enabled = true;
            /* Play the ray sound */
            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 the cow */
            Destroy(other.gameObject);
            transform.position = new Vector2(0.08658695f, 0.1924166f);
            renderer.enabled = false;
        }
    }
}

Это много кода, но это не сложно. Посмотрим, что происходит. Сначала мы создаем экземпляр AudioClip именем cowSound , который мы будем использовать для хранения аудиофайла. Это просто еще один метод воспроизведения звука, если вы не хотите добавлять два аудио компонента к объекту. Мы объявляем переменную как общедоступную, чтобы получить доступ к ней из Инспектора . Нажмите на маленькую точку справа от cowSound и выберите аудиофайл.

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

Мы обнаруживаем касания на экране, которые делают луч видимым и воспроизводят звук луча (см. Ниже). Если объект виден, это означает, что он должен опускаться, чтобы ударить корову.

Также есть код для определения, находится ли луч за пределами сцены. Если это так, мы перемещаем его, снова готовая к выстрелу (проверьте значения x и y луча в Инспекторе ).

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


Чтобы добавить аудио для луча, выберите его в представлении « Иерархия» или « Сцена» и нажмите « Добавить компонент» на панели « Инспектор» . Выберите Audio Source в разделе Audio . Снимите флажок Play on Awake и нажмите маленькую точку справа, чтобы выбрать звуковой файл.


Перетащите рисунок для коровы с панели « Активы» и поместите его в сцену, как показано ниже.


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


Мы также должны добавить коллайдера к корове, чтобы мы могли обнаружить столкновения с сараем и лучом. Обязательно установите флажок Is Trigger в Инспекторе .


Добавьте компонент сценария в корову и замените его содержимое следующим:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using UnityEngine;
using System.Collections;
 
public class MoveCow : MonoBehaviour
{
    public Vector3 moveSpeed;
    public float spawnTime = 2f;
    public float spawnDelay = 2f;
 
    // Use this for initialization
    void Start()
    {
        moveSpeed = Vector3.left * Time.deltaTime;
        InvokeRepeating(«ChangeSpeed», spawnDelay, spawnTime);
    }
 
    void ChangeSpeed()
    {
        moveSpeed = new Vector3(Random.Range(-1, -2), 0, 0) * 0.05f;
    }
     
    // Update is called once per frame
    void Update()
    {
        transform.position += moveSpeed;
    }
}

Класс MoveCow анимирует корову по экрану, используя переменную с именем moveSpeed . Метод InvokeRepeating изменяет скорость коровы, чтобы она бежала с момента достижения центра сцены. Это делает игру более сложной.


С необходимыми компонентами, добавленными к корове, пришло время преобразовать это в Префаб . Что такое сборный? Давайте посмотрим на Руководство по Unity :

«Префаб — это тип ресурса — повторно используемый GameObject, хранящийся в представлении проекта. Префабы могут быть вставлены в любое количество сцен, несколько раз на сцену. Когда вы добавляете« Префаб »в сцену, вы создаете его экземпляр. Все« Префаб » экземпляры связаны с исходным префабом и по сути являются его клонами. Независимо от того, сколько экземпляров существует в вашем проекте, когда вы внесете какие-либо изменения в префаб, вы увидите, что изменения применяются ко всем экземплярам ».

Если вы используете Flash и ActionScript, это должно звучать знакомо. Чтобы преобразовать корову в сборный, перетащите корову с панели « Иерархия» на панель « Активы» . В результате имя в Иерархии станет синим.

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


Сценарий Spawner отвечает за появление коров. Откройте MonoDevelop или ваш любимый редактор C # и создайте новый скрипт:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using UnityEngine;
using System.Collections;
 
public class Spawner : MonoBehaviour
{
 
    public float spawnTime = 2f;
    public float spawnDelay = 2f;
    public GameObject cow;
 
    // Use this for initialization
    void Start()
    {
        InvokeRepeating(«Spawn», spawnDelay, spawnTime);
    }
 
    void Spawn()
    {
        /* Instantiate a cow */
 
        GameObject clone = Instantiate(cow, transform.position, transform.rotation) as GameObject;
    }
}

Мы вызываем метод InvokeRepeating для порождения коров, используя значения, установленные spawnTime и spawnDelay . cow GameObject является общедоступной и создается с помощью инспектора . Нажмите на маленькую точку справа и выберите заготовку коровы.


Для создания префаба для коровы мы будем использовать изображение коровы, которое мы добавили на сцену несколько минут назад. Выберите его и удалите его компоненты. Затем добавьте скрипт Spawner.


Пришло время протестировать игру. Нажмите Command + P чтобы играть в игру в Unity. Если все работает, как ожидалось, вы готовы к последним шагам.


Когда вы довольны своей игрой, пора выбрать « Настройки сборки» в меню « Файл» и нажать кнопку « Настройки игрока» . Это вызывает настройки проигрывателя на панели инспектора, где вы можете настроить параметры для вашего приложения.


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


Заставка или изображение запуска отображается при запуске приложения.

Как только ваш проект будет правильно настроен, пришло время вернуться к настройкам сборки и нажать кнопку « Сборка» . Это все, что нужно для создания вашей игры для тестирования и / или распространения.

Если вы создаете для iOS, вам нужен XCode для создания окончательного двоичного файла приложения. Откройте проект Xcode и выберите Build из меню Product .

В этом уроке мы узнали о новых 2D-возможностях Unity, обнаружении столкновений и других аспектах разработки игр с Unity.

Поэкспериментируйте с результатом и настройте его, чтобы сделать игру своей. Я надеюсь, что вам понравился этот урок, и вы нашли его полезным.