Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Unity
Gamedevelopment

Создаем Арканоид на Unity: Добавление звуков, новых уровней и развертывание игры на различных устройствах

Difficulty:BeginnerLength:MediumLanguages:
This post is part of a series called Build Arkanoid With Unity.
Build Arkanoid With Unity: Block Mechanics, Prefabs, and Level Design

Russian (Pусский) translation by Dmitriy Sirosh (you can also view the original English article)

Final product image
What You'll Be Creating

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

На чем мы остановились

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

Превью результата

Взгляните на это демо, чтобы увидеть, к чему мы стремимся во всей серии:

Звуки и музыка

В нашей первой статье серии мы импортировали в проект несколько звуковых файлов. Теперь пришло время их использовать. В папке Sounds есть три файла:

  • hit.wav: используется при каждом столкновении с мячиком.
  • lose.wav: используется, когда игрок теряет жизнь.
  • point.wav: используется, когда игрок получает очки.

Чтобы эти звуки проигрывались, нам нужно будет немножко изменить наши скрипты Player и Ball. Начнем с объекта Ball (мячик).

Первоначально нам нужно добавить аудио компонент к игровым объектам. Выберите мяч и добавьте Audio Source (Hierarchy > Inspector > Add Component). Обратите внимание, что вы должны снять флажок Play On Awake, если он установлен; иначе звук автоматически будет проигрываться при запуске сцены.

У вас есть аудио компонент; теперь вам нужно изменить скрипт для взаимодействия с самим компонентом. Создайте новую переменную для звукового файла. Поскольку вы хотите получить доступ к звуку в редакторе, переменная должна быть общедоступной public:

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

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

Теперь перейдите в редактор и убедитесь, что в компоненте Ball Script есть новый параметр Hit Sound.

Перетащите файл hit.wav со вкладки Project в поле Hit Sound. Вы должны увидеть что-то вроде этого:

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

А теперь давайте добавим два других звука в игру. Вставьте новый компонент Audio Source, но теперь уже на объект платформы. Снова снимите флажок с пункта Play On Awake.

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

Поскольку теперь у вас есть объекты, давайте модифицируем метод addPoints для воспроизведения звука каждый раз, когда он вызывается. Как и прежде, вы должны вызвать метод PlayOneShot из объекта audio:

Теперь сделайте то же самое в методе TakeLife:

Сохраните сценарий и перейдите еще раз в редактор. Перетащите в каждое из полей по звуковому файлу (point.wav и lose.wav). Вы должны увидеть что-то вроде того, что на скриншоте:

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

Фоновая музыка

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

Во вкладке Hierarchy найдите объект Background и добавьте Audio Source:

Теперь перетащите файл Jaunty Gumption.mp3 из окна Project в поле Audio Clip компонента Audio Source. На этот раз вы должны оставить параметр Play On Awake включенным, так как мы хотим, чтобы музыка начала воспроизводиться при загрузке нашего уровня. Также включите параметр Loop, который позволит музыке начаться заново, если она закончится.

Действуйте и запустите игру нажав Play и проверьте работу фоновой музыки. Теперь в вашей игре есть звук и музыка.

Уровни

Чтобы закончить игру, мы решим две вещи:

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

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

Для этого вам просто нужно сохранить вашу сцену как новую. Нажмите File > Save Scene as..., назовите этот уровень Level2 и поместите его в папку Levels.

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

Выберите объект Background в окне Hierarchy и посмотрите на вкладку Inspector. Перетащите файл Background2 из папки Sprites\Backgrounds в поле Sprite игрового объекта Background:

Для изменения фоновой музыки вам нужно перетащить нужный музыкальный файл в параметр Audio Clip. Для второго уровня Level 2 используйте файл Monkeys Spinning Monkeys.mp3.

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

Откройте скрипт платформы и создайте новый метод WinLose. Здесь мы будем проверять, потерял ли игрок все свои жизни: если переменная playerLives будет равна 0, мы попросту вызовем метод Application.LoadLevel и перезапустим первый уровень.

Далее нам следует проработать момент, когда все блоки на сцене будут уничтожены. Чтобы определить количество оставшихся блоков, мы снова можем использовать метод FindGameObjectsWithTag, на этот раз ищем объекты на текущем уровне с тегом Block. Если полученный массив имеет длину 0, то мы знаем, что пришло время загрузить следующий уровень.

Поскольку в этом руководстве у нас всего лишь два уровня, то если игрок выиграет второй уровень, мы просто закроем игру (вызвав Application.Quit).

Полный фрагмент кода метода WinLose:

В скрипте PlayerScript мы будем вызывать метод WinLose в методе Update - просто добавьте его в конец метода. Для простоты, завершенный метод Update:

Вернитесь в редактор. Для того, чтобы метод WinLose работал правильно, нам надо пометить блоки тегом. Перейдите во вкладку Project, откройте папку Prefabs и выберите блок. Все блоки в настоящее время не отмечены, и нет тега Block, поэтому мы должны его создать. Нажмите кнопку Tag и выберите опцию Add Tag. Добавьте новый тег Block:

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

Компиляция и развертывание проекта

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

Во-первых, вам нужно добавить все сцены в сборку. Нажмите File > Build Settings. Появится новое окно, где, скорее всего, Scenes In Build будет пустым, как здесь:

Если это так, вам нужно добавить сцены, которые мы создали ранее. Нажмите Add Current, и сцена будет добавлена ​​в область Scenes In Build:

В нашем примере мы добавили первый уровень. Закройте это окно и откройте в редакторе второй уровень. Нажмите снова File > Build Settings и нажмите еще раз Add Current:

Если вы добавили второй уровень до первого, не волнуйтесь: просто поменяйте их местами при помощи мыши (так как первая сцена в этом списке - это та, которая будет загружена при запуске игры).

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

Как вы могли заметить, Unity поддерживает множество платформ, которые вы можете выбрать для развертывания своей игры, а именно:

  • Веб-браузеры
  • ПК, Mac и Linux
  • Мобильные операционные системы: iOS, Android, Blackberry и Windows Phone 8
  • Google Native Client
  • Консоли: Xbox 360, PS3 и Wii
  • Windows Store

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

Однако следует отметить, что некоторые платформы и операционные системы имеют определенные ограничения в отношении правил развертывания. Например, вы не сможете установить ваше приложение на iOS, если у вас нет компьютера на Mac OS и лицензии разработчика. Вам также нужны лицензии для развертывания игры на PS3 и Xbox.

Задачи

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

  1. Добавьте еще больше различных стилей и конфигураций для блоков: таких, которые бы различались количеством ударов, от которых они ломаются, и очков, которые зарабатывает игрок при уничтожении блока.
  2. Создайте оригинальный уровень: третий уровень, который полностью отличается от двух других уровней. Вы можете использовать другой фон, другую музыку и другое расположение блоков. Мы хотели бы видеть скриншоты в разделе комментариев!
  3. Реализуйте многопользовательский режим с использованием той же клавиатуры: добавьте необходимую логику для обработки ввода с других клавиш клавиатуры и добавьте в интерфейс игры очки и жизни второго игрока.

Вывод

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

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.