Руководства, Инструкции, Бланки

2d Игра На Unity. Подробное Руководство img-1

2d Игра На Unity. Подробное Руководство

Рейтинг: 4.5/5.0 (1702 проголосовавших)

Категория: Руководства

Описание

2D игра на Unity

2D игра на Unity. Подробное руководство. Часть 1

В первой главе вы найдете основную информацию по загрузке и установке Unity и подготовке первой сцены нашей игры. Настройка среды в Unity

Начнем с самого простого: загрузки и настройки Unity .

Загрузите последнюю версию с официального сайта или торрента и запустите установочный файл.

Для редактирования кода в Unity (4.0.1 и выше) служит редактор MonoDevelop. Если вы работаете в Windows, вы можете (и я вам советую) использовать альтернативый редактор Visual Studio 2013 Desktop (C#) для Windows. после чего в настройках Unity измените редактор по умолчанию на Visual Studio.

Полезно знать: невозможно использовать отладчик Visual Studio 2013 Express с Unity. Вы должны иметь Pro версию Visual Studio и купить UnityVS плагин. С версией Express, вы будете иметь лучший редактор кода, но отсутствие отладчика сведет на нет все его достоинства.

Mac OS X

MonoDevelop 4 - существенно лучше, чем старый MonoDevelop 2 в предыдущих версиях Unity. Он, конечно, далек от совершенства, но ничего лучшего под на Mac не придумано.

На каком языке программировать в Unity?

Unity позволяет кодировать на трех языках: JavaScript, C# и Boo. Рекомендую использовать C# - он более мощный и проще.

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

Вот несколько ссылок, которые могут быть вам полезными:

  • Изучение интерфейса Unitys. основа всех основ. Не зная интерфейса, вы не сможете создавать игры в Unity 3D
  • Создание сцены в Unity. изучение этого раздела поможет вам создать свою собственную сцену
Первая сцена. Создаем новый проект.

Выберите меню File. а затем создаqnt новый проект. Не выбирайте нивакой стандартный пакет на первое время. Вы можете повторно импортировать их позже, если вы захотите, просто поначалу они будут просто сбивать вас с толку.

Выберите 2D настройки. Как и прежде, вы можете изменить этот флаг в настройках проекта позже.

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

Разметка и панели Unity

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

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

Чтобы держать все под рукой, советуем создать папки во вкладке Project (Проект). Эти папки будут созданы в папке Assets вашего проекта.

Внимание: папка Assets – это место, где хранится все, что вы добавляете во вкладке Project. Она может быть невидимой в Unity, в зависимости от выбранной разметки вкладки (одна или две колонки), но вы сможете увидеть ее, открыв приложение для экспорта файлов.

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

Ассеты проекта

В вашей панели Project. вы можете найти различные типы ассетов:

Префабы

Многоразовые игровые объекты (например: пули, враги, бонусы).

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

Сцены

Сцена содержит игровой уровень или меню.

В отличие от других объектов, создаваемых в панели "Проект", сцены создаются в меню "Файл". Если вы хотите создать сцену, нажмите на кнопку "Новая сцена" в подменю и не забудьте потом сохранить ее в папку Scenes .

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

Звуки

Тут все предельно просто. Увидите, если захотите раскидать музыку по разным папкам.

Scripts

Весь код находится здесь. Мы используем эту папку в качестве эквивалента корневой папке в C# проекте.

Textures

Спрайты и изображения вашей игры. В 2D проекте вы можете переименовать эту папку в "Sprites".

Это неважно для 2D проекта, но, оставив название Textures (Текстуры), вы дадите возможность Unity автоматизировать некоторые задачи. Если вы хотите узнать подробную информацию по этой теме, вы можете прочитать об этом здесь. или здесь .

Заметка о папке Resources. если вы уже работали с Unity, вы знает, что Resources – полезная и уникальная папка. Она позволяет загрузить в скрипт объект или файл (с помощью статичного класса Resources ). Она понадобится нам в самом конце (в главе, посвященной меню). Проще говоря, пока мы не будем ее добавлять. Наша первая игровая сцена

Панель Hierarchy (Иерархия) содержит все объекты, которые доступны в сцене. Это то, чем вы манипулируете, когда начинаете игру с помощью кнопки "Play".

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

Как вы можете видеть здесь, у нас здесь 3 потомка для объекта Level .

Пустые объекты

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

Убедитесь, что все они имеют координаты (0, 0, 0) и тогда вы сможете легко их найти! Пустые объекты никак не используют свои координаты, но они влияют на относительные координаты их потомков. Мы не будем говорить об этой теме в этом уроке, давайте просто обнулим координаты ныших пустых объектов.

Заполнение сцены

По умолчанию, новая сцена создается с объектом Main Camera (Главная камера). Перетащите ее на сцену.

Для начала создайте эти пустые объекты:

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

В Level создайте 3 пустых объекта:

  • 0 - Background
  • 1 - Middleground
  • 2 - Foreground

Сохраните сцену в папке Scenes. Назовите ее как угодно, например Stage1. Вот, что у нас получилось:

Совет: по умолчанию игровой объект привязан к положению родителя. Это приводит к интересному побочному эффекту при использовании объекта камеры: если камера является дочерним объектом, она автоматически будет отслеживать положение родителя. Если же она является корневым объектом сцены или находится внутри пустого игрового объекта, она всегда показывает один и тот же вид. Однако если вы поместите камеру в движущийся игровой объект, она будет следовать за его передвижениями в пределах сцены. В данном случае нам нужна фиксированная камера, поэтому мы помещаем ее в пустой объект Render. Но запомните это свойство объекта камеры, оно может вам пригодиться. Мы подробно остановимся на этой теме в главе "Паралаксный скроллинг".

Мы только что создали базовую структуру нашей игры. На следующем этапе мы начнем делать забавные вещи: добавим на сцену фон и кое-что еще!

Добавляем фон в сцену

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

Импортируйте изображение в папку Textures (Текстуры). Просто скопируйте файл в нее, или перетащите его из проводника. Не беспокойтесь сейчас о настройках импорта.

Создайте в Unity новый игровой объект Sprite на сцене.

Что такое спрайт?

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

Добавляем текстуру спрайта

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

Вы должны нажать на маленький круглый значок справа от поля ввода, чтобы появилось Select Sprite (Выбрать спрайт) в Инспекторе

Мой спрайт не появляется в диалоговом окне! Убедитесь, что вы находитесь в вкдадке Assets диалогового окна "Select Sprite" (Выбрать спрайт). Если вы видите диалоговое окно пустым, - не пугайтечсь. Дело в том, что для некоторых установок Unity, даже со свежим новым 2D проектом изображения импортируются как "Текстура", а не "Спрайт". Чтобы это исправить, необходимо выбрать изображение на панели "Проект", и в "Инспекторе", изменить свойство "Текстура Type" имущество "Sprite":

Итак, мы создали простой спрайт отображающий облака на небе. Давайте внесем изменения в сцену. В панели Hierarchy (Иерархия) выберите New Sprite. Переименуйте его в Background1 или что-то такое, что легко запомнить. Переименуйте его в Background1 или что-то такое, что легко запомнить. Затем переместите объект в нужное место: Level -> 0 - Background. Измените координаты на (0, 0, 0) .

Создайте копию фона и поместите его в (20, 0, 0). Это должно отлично подойти к первой части.

Слои со спрайтами

Следующее утверждение очевидно, но обладает некими неудобствами: мы отображения 2D мир. Это означает, что все изображения на одной и той же глубине, то есть 0. И вы графический движок не знает, что отображать в первую очередь. Слои спрайтов позволяют нам обозначить, что находится спереди, а что сзади.

В Unity мы можем изменить "Z" наших элементов, что позволит нам работать со слоями. Это то, что мы делали в этом руководстве перед обновлением до Unity 5, но нам понравилась идея идея использовать слои со спрайтами. У вашего компонента Sprite Renderer есть поле с именем Sorting Layer с дефолтным значением. Если щелкнуть на нем, то вы увидите:

Давайте добавим несколько слоев под наши нужды (используйте кнопку + ):

Добавьте фоновый слой к вашему спрайту фона:

Настройка Order in Layer - это способ ограничить подслои. Спрайты с меньшим номером оказываются перед спрайтами с большими числами.

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

Добавление элементов фона

Также известных как props. Эти элементы никак не влияют на геймплей, но позволяют усовершенствовать графику игры. Вот некоторые простые спрайты для летающих платформ:

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

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

Выполняйте следующие действия:

  1. Импортируйте изображения в папку "Текстуры"
  2. Выберите спрайт Platform и перейдите к панели Инспектор
  3. Измените "Sprite Mode" на "Multiple"
  4. Нажмите на кнопку Sprite Editor (Редактор спрайта)

В новом окне ( Sprite Editor ) вы можете рисовать прямоугольники вокруг каждой платформы, чтобы разрезать текстуру на более мелкие части:

Кнопка Slice в левом верхнем углу позволит вам быстро и автоматически проделать эту утомительную работу:

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

В этом уроке проделаем эту операцию вручную. Назовите платформы platform1 и platform2. Теперь, под файлом изображения, вы должны увидеть два спрайта отдельно:

Добавим их в сцену. Для этого мы будем выполнять те же действия что и для фона: создадим новый спрайт и выберим platform1. Потом повторим эти действия для platform2. Поместите их в объект 1 - Middleground. Убедитесь, что их позиция по оси Z равна нулю.

Prefabs (Префабы)

Сохранить эти платформы как префабы. Просто перетащите их в папку Prefabs :

Таким образом вы создадите Prefab. точно отвечающий оригинальному игровому объекту. Вы увидите, что игровой объект, который вы конвертировали в Prefab. представляет собой новый ряд кнопок прямо под его именем:

Заметка о кнопках "Prefab": При последующей модификации игрового объекта, вы можете использовать кнопку "Apply", чтобы применить эти изменения к Prefab. или кнопку "Revert", чтобы отменить все изменения игрового объекта в свойстваъ Prefab. Кнопка "Select" переместит выбранные свойства в ассет Prefab в окне проекта (они будут выделены).

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

Теперь вы можете добавить больше платформ, меняющих свои координаты, размеры и плоскости (вы можете поместить их на заднем или переднем плане, просто установите координату Z для платформы на 0 ).

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

Слои

Прежде чем двигаться дальше, мы модифицируем наши слои, чтобы избежать каких-либо проблем с порядком их отображения. Для этого просто измените позицию игровых объектов по оси Z во вкладке Hierarchy (Иерархия) следующим образом:

Другие статьи

2D игра на Unity

2D игра на Unity. Подробное руководство. Часть 6

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

Начнем подыскивать звуковый файлы для нашей игры. Самое главное — сохраняйте все свои звуки в несжатом 8bit .wav формате. В дальнейшем, в самом Unity можно будет сжать звук, не изменяя исходного .wav файла. Вот, что мы можем сделать:

  • Купить мелодию.
  • Попросить знакомого музыканта.
  • Использовать бесплатные звуки из звуковых банков (например, FindSounds or Freesound ).
  • Записать звук самому.

С музыкой немного сложнее, но тоже все решаемо:

  • На сайте Jamendo много музыки разных музыкальных направлений. Будьте осторожны с лицензиями для коммерческих целей.
  • Иногда любители выкладывают свою музыку на рутрекере.
  • Воспользуйтесь продуктом Bosca Ceoil от Терри Кавана для создания своей, неповторимой мелодии.

Итак, создайте или найдите звуки взрыва и выстрела. Если вам лень, вы можете использовать эти:

Мы будем использовать один из треков игры "Больное бумажное приключение", Спинтроник для этого урока:

Импорт звука в Unity

Переместите 4 звуковые дорожки в папку "Sounds". Убедитесь, что для каждой из во вкладке "Инспектор" отключен "3D звук" (так как мы делаем 2D игру) и нажата кнопка "Применить". Вот и все.

Для воспроизведения музыки, просто перетащите песню во вкладку «Иерархия» (Hierarchy). Мы приглашаем Вас:

  1. Переименуйте новый игровой объект в «Музыка».
  2. Поместите его на (0, 0, 0) .

Обратите внимание на флажок "Mute". Это может вам пригодиться в ваших тестах. Со звуками придется повозиться, поскольку они должны проигрываться в определенное время. Для решения этой задачи напишем новый скрипт под названием "SoundEffectsHelper":

Добавьте этот скрипт в игровой объект и заполните его поля со звуковыми клипами:

  1. SoundEffectsHelper.Instance.MakeExplosionSound(); в "HealthScript", только после воздействия частиц.
  2. SoundEffectsHelper.Instance.MakePlayerShotSound(); в "PlayerScript", сразу после weapon.Attack(false); .
  3. SoundEffectsHelper.Instance.MakeEnemyShotSound(); в "EnemyScript", сразу после weapon.Attack(true); .

Запустите игру и прислушайтесь. Да, у нас теперь есть звуки и музыка!

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

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

Меню - загрузка и перезапуск игры

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

К сожалению, Unity не располагает инструментами для создания создать красивых меню и, даже используя сторонние библиотеки, приходится повозиться. В этом уроке мы не будем строить сложный графический интерфейс, поэтому воспользуемся встроенными инструментами. Давайте начнем с основ. Сохраните следующие картинки:

Это наши фон и логотип. Импортируйте их в проект. Вы можете поместить их в "Меню" - подпапку "Текстуры". В противном случае "фон" сотрет предыдущий файл игры. Для кнопок мы будем использовать стандартные (уродливые) кнопки Unity .

Главное меню

Настало время создать сцену с главным меню. Это то, что показывается юзеру при запуске игры. Для начала, создайте новую сцену:

  1. "File" -> "New scene".
  2. Сохраните ее в папке "Scenes" как "Menu".
Вы можете также нажать cmd+N (OS X) или ctrl+N (Windows).

Наше главное меню будет состоять из:

  • Фона.
  • Логотипа.
  • Скрипта, который будет отображать кнопки.
  1. Создайте новый спрайт.
  2. Установите его в (0, 0, 1) .
  3. Задайте размер (2, 2, 1) .
  1. Создайте новый спрайт.
  2. Установите его в (0, 2, 0)
  3. Задайте размер (0.75, 0.75, 1)

Вот, что у вас должно получиться:

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

Теперь мы добавим кнопку "начать игру" с помощью скрипта. Создать скрипт по имени "MenuScript" в папке "Scripts", и приложите его к новому пустому игровому объекту под названием "Scripts":

О синтаксисе можете подробнее почитать здесь GUI.Button.

Мы просто рисуем кнопку, которая будет загружать сценe "Stage1", когда игрок нажимает на нее.

Метод OnGUI применяется в каждом кадре и вставляет весь код, в котором отображен элемент GUI: полоса жизни, меню, интерфейс и т.д. Объект GUI позволяет нам быстро создать компоненты GUI из кода, как кнопка с методом GUI.Button.

Теперь запустите игру и полюбуйтесь нашим замечательным меню:

Жмем и. Катастрофа!

То, что нам нужно сделать четко написано в сообщении об ошибке.

Добавление сцен в сборку

Нажмите в меню Unity на "File", затем на "Build Settings":

Теперь перетащите все сцены, которые должны быть в вашей игре. Здесь все просто: это "Меню" и "Stage1".

Вернитесь в меню. Нажмите на кнопку и. играть!

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

Для этих случаев в Unity есть метод DontDestroyOnLoad(aGameObject). Просто примените его к игровому объекту – и он не исчезнет при загрузке новой сцены. Он вообще не исчезнет. Поэтому если в следующей сцене вам понадобится его убрать, придется уничтожать его вручную.

Наконец, мы позволим игроку начать игру сначала после того, как его персонаж умер. И, как вы, возможно, заметили, заметили происходит достаточно часто. Давайте "упростим" игру. Вот, что у нас сейчас происходит:

  1. Игрок попадает под пули.
  2. HealthScript.OnCollisionEnter запускается.
  3. Игрок теряет 1 единицу здоровья.
  4. "HealthScript" уничтожае игрока, так как у него меньше, чем 1 единица здоровья.

Мы добавим два новых действия:

  1. Вызывается PlayerScript.OnDestroy .
  2. Создается "GameOverScript" и добавляется к сцене.

Создайте в папке "Scripts" новый скрипт по имени "GameOverScript". Это маленький кусочек кода, который будет отображать кнопки "Начать сначала" и "Назад в меню":

Это абсолютно идентично первому скрипту, который мы написали, с двумя кнопками.

Теперь, в "PlayerScript", нам нужно привязать этот новый скрипт к смерти:

Запустите игру и попытайтесь умереть (это не должно занять много времени):

Вы можете найти скрипт где-то на сцене:

Конечно, вы можете улучшить скрипт, например, добавив в него счет или анимациИ.

Если вы хотите провернуть что-нибудь эдакое, можете создать "GUI Skin".

Вы можете изменить интерфейс в "Inspector", чтобы сделать игру более интересной. Убедитесь в том, что этот скин лежит в папке «Resources» (Ресурсы).

Папка "Resources" занимает в Unity особое место. Чтобы загрузить ее содержимое, используйте метод Resources.Load(). Так вы получите возможность добавлять объекты прямо во время игры, и эти объекты могут быть созданы самими пользователями (как насчет модов?).

Тем не менее, скин не применяется до тех пор, пока вы не вызовите его в вашем скрипте. Во всех наших предыдущих сценариях GUI, мы должны загрузить скин только один раз, а не в каждом кадре, используя GUI.skin = Resources.Load ("GUISkin"); .

Вот пример в "MenuScript" (проследите, как действует метод Start() ):

Как видите, нам пришлось изрядно попотеть чтобы сделать банальное неанимированное меню. Мы только что узнали как сделать меню для нашей игры. Поздравляем, вы только что сделали полноценный игровой продукт! Но, к сожалению, эта игра только на вашем компьютере. Чтобы продать ее, мы должны заявить о ней миру. Это как раз то, о чем мы будем говорить с вами в следующем уроке по Unity .

  • unity
2D игра на Unity. Подробное руководство. Часть 1

Все для редактирования и создания игр

В первом уроке я расскажу вам, какие инструменты нам пригодятся для создание 2D игры в Unity3D .

Инструментарий:
  • Unity3D . Если вы читаете эту статью, то я думаю вы уж точно знакомы с самым важным инструментом, представленном в этом списке. Unity3D - это всем известный и очень популярный движок для создания игр и трехмерных миров.
  • Orthello2DFramework . Бесплатный фреймворк, предназначенный для работы с 2D графикой в Unity3D .
  • iTween . Отличный помощник в создании анимации. Благодаря ему вам теперь не придется прописывать кучи строк кода, теперь все можно сделать прямо в редакторе.
  • A* PathfindingProject . Скорее всего, самая популярная система поиска пути, доступная для Unity3D. Она быстрая, мощная, легкая в использование, и главное, есть бесплатная версия.
  • TexturePacker . Приложение, которое позволяет легко создавать спрайты из текстур.
Создаем новый проект:
  1. Скачиваете и устанавливаете последнюю версию Unity3D. Далее создаем новый проект (File->New Project ). Если хотите поместить ваш проект в определенную папку жмем Set.. выбираем нужную папку, а затем жмем Save. Конечно вы можете импортировать готовые пакеджи, но они нам не нужны. Ну и финальный штрих, жмем Create Project .
  2. В папке с проектами нужно создать папке "Scenes ”, в которой мы будем сохранять все созданный сцены. (File->Save Scene As ), откройте папку Scenes. которую мы создали ранее, назовите сцену, например, "level1 ”, и нажмите Save .
Установка Orthello 2D Framework:
  1. Откроем Asset Store (Window -> Asset Store). в строке поиска вводим "orthello2d ". Находим Orthello 2D Framework. скачиваем его. Или скачайте последнюю версию с сайта разработчиков, распакуйте архив, два раза нажмите на orthello.unitypackage .
  2. Когда окно Import Package откроется, поставьте галочки на все файлы и папки и нажмите Import. После нескольких секунд ожидания вы увидите папку "Orthello ” в Project view .
Работа с Orthello 2D:

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

Чтобы работать с Orthello 2D Framework. нужно сделать несколько вещей. Вам нужно делать это в каждой новой сцене.

OT префаб будет родительским классом для анимации и спрайтом, который мы будем добавлять позже. Он так же вносит изменения в главную камеру, которая настраивается для работы с 2D режимом. Проекция меняется на ортогональную и размер меняется на 332.

Устанавливаем iTween:
  1. Откроем Asset Store (Window -> Asset Store). в строке поиска вводим "itween ". Находим нужную нам страничку, открываем, жмем Download .
  2. Когда окно Import Package откроется, поставьте галочки на все файлы и папки и нажмите Import. После нескольких секунд ожидания вы увидите папку "iTween ” в Project view. Если вы хотите, вы можете удалить "ReadMe! ”, но было бы неплохо его сначала прочитать, а так же папку "Sample ”, но если вы не работали с iTween ранее, то советую посмотреть примеры, представленные в ней.
Установка A* Pathfinding:

К сожалению, бесплатная версия A*Pathfinding недоступна в Asset Store. Но ее можно скачать с сайта разработчиков.

Работа с A* Pathfinding:

Для начала было бы неплохо прочитать документацию по A* Pathfinding .

  1. Создать пустой игровой (пустышку).GameObject->Create Empty .
  2. Координатам x,y,z установить значение - 0. Переименовать его в "A* ".
  3. Добавить Astar Path Script к нашей пустышки. Для этого нужно выбрать Component->Pathfinding,а потом нажать на Pathfinder .
  4. Когда объект A* выделен, в Hierarchy вы сможете увидеть Astar Path Script . Там вы можете увидеть сообщение "Do you want to enable JavaScript support?” ("Хотите включить поддержку JavaScript"). Все скрипты в данной серии туториалов будут написаны на C#, вы можете нажать "No ” (Нет), а потом изменить если это будет необхобимо.

Первый туториал из серии можно считать завершенным.

Эта статья является переводом. Оригинал

Делаем игру Arkanoid 2D - NULLcode Studio

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

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

Вы не можете скачивать файлы с нашего сервера

Создаем новый проект File -> New Project


И сразу сделаем несколько папок: Sprites, Sound, Scripts, Scenes, Prefab, Materials


Кликаем правой кнопкой мыши по папке Materials и выбираем Create -> Physics2D Material. можно назвать материал как угодно. Нужно его настроить, у нас два параметра Friction (трение) и Bounciness (пружинистость). Нам нужно, чтобы шарик всегда отскакивал при контакте с другими объектами, без потери скорости, значит коэффициент трения ставим на 0, а пружинистость на 1.

В папке Scripts, создаем новый C# скрипт и назовем его Menedjer, он будет хранить информацию о количестве очков, жизней, а так-же переменные выиграл или проиграл, и вывод информации через UI. Создаем пустой игровой объект GameObject -> Create Empty. назовем его так-же (Menedjer) и вешаем на него наш скрипт. Преступим к редактированию. Подключаем сразу UI кстати говоря:


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


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


В функцию Start пишем следующее:


То есть, во время запуска сцены, выключаются кнопки. Выиграл (win) или проиграл (lose), значение false, иначе говоря - нет. Следующая строка, проверка, если текущая сцена (Application.loadedLevel) ровна нулю, то - жизней будет три.


Сделаем вывод текста. Сохраняем скрипт, возвращаемся в редактор.
Надо добавить элементы юзер интерфейса, GameObject -> UI -> Text. вы увидите что-то типа этого:


Переименуем Canvas в UI для удобства. Настроим Text как показано на скриншоте ниже.


Возвращаемся в скрипт и добавим еще одну функцию (на забываем сохранить):


Это для наших кнопок, которые кстати надо тоже добавить еще, GameObject -> UI -> Button. Назовем ее WinButton, текст "Продолжить", теперь добавим действие, функцию GameStart:


В появившемся поле ввода, ставим 1. Дублируем кнопку Ctrl+D имя LoseButton текст "Переиграть", а в поле ввода ставим 0. То есть, получается, что если мы нажимаем например "Продолжить", то отправляем нашей функции 1, а текущий номер плюс единица - переходим на уровень выше, если отправим 0, то просто сцена будет перезагружена.


По краям сцены надо разместить Box Collider 2D. чтобы наш шарик не улетал за пределы экрана. А внизу такой-же коллайдер, но поставить галочку Is Trigger. изменим имя на Killbox и добавим объекту одноименный тег.

Итак, наложим кирпичей. Укомплектуем спрайт будущего кирпича, коллайдером и скриптом, со следующим содержанием:


Имя скрипта Block и пара переменных, прочность и номер. Перетаскиваем объект в папку Prefab.


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

Затем создаем скрипт PackCheck и вешаем его на упаковку наших кирпичей Pack:


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

Займемся шариком. Создаем новый скрипт Ball:


Вешаем его на спрайт шарика и добавляем компоненты Rigidbody 2D и Circle Collider 2D


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

Вроде чего-то не хватает? Ах да, платформа. Кидаем спрайт на сцену, сразу определим позицию по центру и сместим вниз экрана. Теперь надо внутри платформы создать пустышку GameObject -> Create Empty Child и поднимем ее немного вверх Y = 1, назовем пустышку Respawn, это будет точка появления нашего шарика. Box Collider 2D не забываем повесить на платформу. И последний скрипт PlatformControl на сегодня:


Если ничего нигде не забыли, то можно пробовать играть. Собственно всё.


Дополнительно, Вы можете скачать уже готовую игру:

Внимание! У Вас нет прав для просмотра скрытого текста.

2D игра на Unity

2D игра на Unity. Подробное руководство. Часть 3

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

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

Снаряд – объект, которым мы будем пользоваться очень часто. В игре будет несколько сцен, в которых игрок будет стрелять. Что мы должны использовать в этом случае? Префаб (Prefab), конечно же! Для этого проделайте следующие действия:

  1. Импортируйте текстуру
  2. Создайте новый спрайт в сцене
  3. Установите изображение на спрайт.
  4. Добавьте "Rigidbody 2D" с равныим нулю значениями "Gravity Scale" и "Fixed Angles".
  5. Добавьте "Box Collider 2D" размером (1, 1) .

Сделайте масштаб таким (0,75, 0,75, 1) для лучшего отображения. Теперь, нам нужно установить новый параметр в "Инспекторе" (Inspector). для этого в "Box Collider 2D" поставьте галочку напротив свойства "IsTrigger". Триггер коллайдера создает событие при столкновении, но не используется при моделирования физики. Это значит, что выстрел пройдет сквозь объект при соприкосновении — никакого «реального» взаимодействия не будет. А вот у другого коллайдера это спровоцирует событие "OnTriggerEnter2D".

Та-дам! У нас появился выстрел. Теперь настало время немного поскриптить. Создайте скрипт, назвав его "ShotScript":

Прикрепите "ShotScript" к спрайту. Также добавьте "MoveScript", т.к. ваши снимки будут двигаться. Теперь перетащите объект выстрел в панель "Проект" для создания Префаба. Он нам совсем скоро понадобится. Вы должны иметь следующую конфигурацию:

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

Столкновения и повреждения

Тем не менее, выстрел (пока) не наносит повреждений. Ничего удивительного, ведь мы не сделали скрипт обработки повреждений. Создадим его, назвав "HealthScript":

Добавьте "HealthScript" на префаб спрута.

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

Убедитесь, что выстрел и спрут находятся на одной линии, чтобы проверить столкновение. Напоминаю, что 2D движок ничего не знает про ось Z, поэтому ваши 2D коллайдеры всегда будут в той же плоскости. А теперь, запустите нашу сцену. Вы должны увидеть следующее:

Здоровье врага превосходит урон от выстрела, поэтому он выживет. Попробуйте изменить значение hp в "HealthScript" врага:

Стрельба

Удалите выстрел из сцены. Теперь, когда мы с ним закончили, ему нечего там делать. Нам нужен новый скрипт для стрельбы. Создайте его под именем "WeaponScript". Этот скрипт мы будем использовать везде (игроки, враги и т.д.) Его цель заключается в to instantiate снаряда перед игровым объектом, к которому он привязан. Вот полный код, больше, чем обычно. Объяснения ниже:

Прикрепите этот скрипт к игроку. Скрипт делится на три части:

Переменные во вкладке "Inspector"

Здесь у нас есть два члена: shotPrefab и shootingRate .

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

Выберите игрока в сцене "Hierarchy". В компоненте "WeaponScript", вы можете увидеть свойство "Shot Prefab" со значением "None". Перетащите префаб "Shot" на это место:

Unity автоматически дополнит скрипт это информацией. Удобно, не так ли?

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

Будьте осторожны: изменение значения переменной во вкладке "Инспектор" в Unity не приводит к сохранению этих значений в скрипте. Если добавите этот скрипт в другой объект, значение по умолчанию будет таким, которое написано в скрипте. Если же вы хотите сохранить отредактированные параметры, вы должны открыть свой редактор кода и записать эти значения там.
  • Оружие обладает определенной частотой выстрелов. Без этого параметра можно было бы выпускать неограниченное количество патронов в каждом кадре.

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

    3. Публичный метод создания атаки

    Главная цель этого скрипта – активироваться через другой скрипт. Поэтому для создания снаряда мы используем публичный метод.

    Создав екземпляр снаряда, мы извлекаем скрипты объекта выстрела и оверрайдим некоторые переменные.

    Внимание. С помощью метода GetComponent<TypeOfComponent>() можно создать точный компонент (а значит, и скрипт, потому что скрипт – тоже компонент) объекта. Используйте generic ( <TypeOfComponent> ) для обозначения конкретного компонента, который вам нужен.
    Кроме того, у нас есть GetComponents<TypeOfComponent>(). вызывающий список вместо первого и т.д.

    Использование оружия с классом игрока

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

    В самом деле, если "WeaponScript" был бы привязан к классу, мы никогда не смогли бы использовать метод Attack(bool) .

    Давайте вернемся к нашему "PlayerScript".

    В функции Update() добавьте этот кусочек кода:

    На данном этапе неважно, поставите вы его перед или после движения.

    1. Мы определяем нажатие кнопки стрельбы ( click или ctrl по умолчанию).
    2. Извлекаем скрипт объекта.
    3. Мы запускаем Attack(false) .
    Button down. Вы уже наверняка заметили, что мы используем метод GetButtonDown() для обеспечения ввода. "Down" в конце позволяет нам ввести данные при нажании кнопки и только один раз. GetButton() будет выводить true в каждом кадре, пока гирок не отпустит кнопку. В нашем случае нам явно необходимо поведение, обеспечиваемое методом GetButtonDown(). Попробуйте использовать GetButton() и почувствуйте разницу.

    Запустите игру с помощью кнопки "Play". Вот что вы должны получить:

    Пули летят слишком медленно? Поэкспериментируйте с префабом "Shot" чтобы выбрать ортимальное значение. Попробуйте также добавить вращение игроку: (0, 0, 45). Пули двигаються под углом 45 градусов, даже если вращение спрайта выстрела является некорректным – а ведь мы его не изменили.

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

    Вражеский снаряд

    Мы создадим новый снаряд с помощью этого спрайта:

    Если вы так же ленивы, как я, продублируйте префаб "PlayerShot", переименуйте его в "EnemyShot1" и измените спрайт, как описано выше.

    Для дублирования создайте экземпляр, перетащив его на сцену, переименовав созданный игровой объект и, наконец, сохранив его как `Prefab’.

    Или можно просто продублировать Prefab напрямую внутри папки с помощью ярлыков cmd+D (OS X) или ctrl+D (для Windows).
    Если вы не выбираете легких путей, вы можете создать новый спрайт с параметром rigibody, коллайдером с триггером и т.д.

    Правильный масштаб - (0.35, 0.35, 1) .

    Вот, что у вас должно получиться.

    При нажатии "Play" произойдет выстрел, который потенциально может уничтожить врага. Это из-за свойств "ShotScript" (которые по умолчанию плохо совместимы с Poulpi).

    Не изменяйте ничего. Помните наш "WeaponScript"? Он то и установит правильные значения.

    У нас есть префаб "EnemyShot1". Удалите экземпляры со сцены, если они есть.

    Также, как мы делали для игрока, также нам нужно добавить оружие и врагу, а потом вызывать Attack() чтобы выстрелить. Вот, что нам надо сделать:

    1. Добавьте "WeaponScript" врагу.
    2. Перетащите префаб "EnemyShot1" в переменную "Shot Prefab" скрипта.
    3. Создайте новый скрипт под названием "EnemyScript". Он просто будет запускать стрельбу в каждом кадре. Что-то вроде автострельбы.

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

    Замечание. Если вы модифицируете игровой объект в сцене, не забудьте сохранить все изменения в префабе. использовав кнопку "Применить" справа сверху от панели "Инспектор".

    Попробуйте сыграть и посмотреть!

    Итак, мы сделали то, что хотели и теперь и по нам тоже стреляют.

    Если повернуть врага, вы можете сделать его стреляющим в его слева, но, хм. спрайт повернулся вверх ногами, а нам это не нужно.

    Давайте исправим это недоразумение.

    Стрельба в любом направлении.

    "WeaponScript" был написан особым образом: вы можете выбрать направление стрельбы, просто вращая прикрепленный игровой объект. Мы уже видели это раньше, когда вращали спрайт врага. Суть в том, чтобы создать пустой игровой объект как ребенка префаба врага. Итак, нам нужно:

    1. Создать пустой игровой объект. Назовем его "WeaponObject".
    2. Удалим "WeaponScript", прикрепленный к префабу врага.
    3. Добавим "WeaponScript" к "WeaponObject" и установить свойства префба выстрела как мы это делали раньше.
    4. Повернем "WeaponObject" вот так (0, 0, 180) .

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

    However, we have a small change to make on the "EnemyScript" script.

    В своем нынешнем состоянии вызов GetComponent<WeaponScript>() в "EnemyScript" возвращает null. В самом деле, "WeaponScript" больше не привязан к одному объекту игры.

    К счастью, в Unity также доступен метод, использующий детскую иерархию игрового объекта, который называется GetComponentInChildren<Type>() .

    Для GetComponent<>(). GetComponentInChildren<>() также существует в форме множественного числа: GetComponentsInChildren<Type>(). Обратите внимание на s после "Component". Этот метод возвращает список вместо первого соответствующего компонента.

    На самом деле, просто для удовольствия, мы также добавили возможность управления несколькими видами оружия. Мы просто манипулируем списком вместо одного экземпляра компонента. Взгляните на весь "EnemyScript":

    Наконец, нужно обновить скорость выстрела путем настройки публичной пременной "MoveScript" из префаба "EnemyShot1". Скорость выстрела должна быть больше скорости движения спрута:

    Мы сделали великого и ужасного осьминога. А давайте еще реализуем стрельбу в двух направлениях?

    Стрельба а двух направлениях

    Эта задача реализуеся всего в пару кликов. Для этого не нужны никакие скрипты:

    1. Добавьте другое оружие врагу (дублируя первый "WeaponObject").
    2. Измените угол поворота второго "WeaponObject".

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

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

    Нанесение урона игроку

    Наши осьминоги внушают ужас? Как бы не так! Да, они могут стрелять, но это не наносит повреждения игроку. Может, у них холостые патроны? Давайте разбираться.

    Просто добавьте "HealthScript" на игрока. Убедитесь, что сняли галку с поля "IsEnemy".

    Запустите игру и почувствуйте разницу:

    Бонус

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

    Солкновения игрока с врагом

    Давайте посмотрим, как мы можем обработать столкновения между игроком и врагом, поскольку сейчас они сталкиваются друг с другом без последствий. Столкновение - это результат пересечения двух не-триггерных 2D коллайдеров. Нам просто нужно обрабатывать событие OnCollisionEnter2D в PlayerScript :

    При столкновении мы наносим урон как врагу, так и игроку благодаря наличию компонента HealthScript. К нему привязано все, что относится к здоровью/урону.

    Массив снарядов

    Когда вы играете, вы можете наблюдать ва вкладке "Иерархия" (Hierarchy), что игровые объекты создаются и удаляются только через 20 секунд (если они не сталкиваются с игроком или врагом).

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

    Один из способов увеличить количество пуль – использовать массив. По сути, это набор пуль ограниченного размера. Когда массив заполнен, удалите старый объект и замените его на новый.

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

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

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

    Поведение пули

    В хорошем шутере должны быть запоминающиеся боевые сцены.

    Некоторые библиотеки вроде BulletML значительно упрощают определение сложных и зрелищных bullet patterns.

    Если вы хотите сделать полную версию игры в жанре Shoot'Em Up, ознакомьтесь с нашим плагином BulletML for Unity

    Задержка выстрела

    Добавьте несколько вооруженных противников в сцену и запустите игру. Вы увидете как синхронны все враги.

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

    Скорость врагов также может определяться случайной величиной.

    Еще раз, это зависит от вас. Все зависит исключительно от того, чего вы хотите достичь с вашим геймплеем.

    В следующем уроке

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

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

    • unity
    2D игра на Unity. Подробное руководство. Часть 1

    • слайдер
    Адаптивный слайдер без Javascript на CSS3

    • unity
    Работа с Unity в 2D

    • unity
    2D игра на Unity. Подробное руководство. Часть 3

    • unity
    2D игра на Unity. Подробное руководство. Часть 4

    • unity
    2D игра на Unity. Подробное руководство. Часть 5

    • unity
    2D игра на Unity. Подробное руководство. Часть 6

    • unity
    Учебник по новому GUI в Unity. Часть 2.

    • unity
    Учебник по новому GUI в Unity. Часть 1.