Книга «Unity в действии. Мультиплатформенная разработка на C#. 2-е межд. издание»

image Привет, Хаброжители! Второе издание «Unity в действии» было полностью переработано, чтобы познакомить вас с новыми подходами и идеями, позволяющими максимально эффективно использовать Unity для разработки игр. Больше внимания уделено проектированию двумерных игр, фундаментальные концепции которых читатель может применить на практике и построить сложный двумерный платформер. Эту книгу можно смело назвать введением в Unity для профессиональных программистов. Джозеф Хокинг дает людям, имеющим опыт разработки, всю необходимую информацию, которая поможет быстро освоить новый инструмент и приступить к созданию новых игр. А учиться лучше всего на конкретных проектах и практических заданиях.

Unity зачастую представляют как набор компонентов, не требующих программирования, что в корне неверно. Для создания успешной игры необходимо многое: великолепная работа художника, программистские навыки, интересная история, увлекательный геймплей, дружная и слаженная работа команды разработчиков. А еще нельзя забывать про безупречную визуализацию и качественную работу на всех платформах — от игровых консолей до мобильных телефонов. Unity объединяет мощный движок, возможности профессионального программирования и творчества дизайнеров, позволяя воплотить в жизнь самые невероятные и амбициозные проекты.
Осваивайте Unity и быстрее приступайте к созданию собственных игр!

Структура книги


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

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

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

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

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

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

Глава 7 знакомит с новейшей GUI-функциональностью в Unity. Пользовательский интерфейс требуется всем играм, а последние версии Unity могут похвастаться улучшенной системой создания пользовательского интерфейса.

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

Глава 9 покажет способы реализации интерактивных устройств и элементов в игре. У игрока будет ряд способов применения этих устройств, в том числе прямым касанием, прикосновением к пусковым устройствам внутри игры или нажатием кнопки контроллера.

Глава 10 учит взаимодействию со Всемирной паутиной. Вы узнаете, как отправить и получить данные с помощью стандартных технологий, таких как HTTP-запросы на получение с сервера XML-данных.

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

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

Об авторе


Джозеф Хокинг живет в Чикаго и занимается разработкой программного обеспечения для интерактивных сред. Он работает в фирме InContext Solutions. Первое издание данной книги было написано в период его работы в компании Synapse Games. Кроме того, он преподавал разработку игр в Университете Иллинойса, в Чикагском институте искусств и в колледже Колумбия. Его сайт www.newarteest.com.

Отрывок. 6.4.2. Толчок вверх


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

image


Обратите внимание на команду AddForce (). Восходящая сила добавляется к компоненту Rigidbody в импульсном режиме; импульс — это внезапный толчок в отличие от непрерывно действующей силы. В коде такой толчок возникает после нажатия клавиши Пробел. При этом на персонаж продолжает действовать сила тяжести, благодаря чему после прыжка он описывает красивую дугу.

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

6.4.3. Распознавание поверхности


У элемента управления прыжком есть один маленький недостаток: возможность прыгать в полете (когда персонаж уже подпрыгнул или когда он падает). Нажатие клавиши Пробел даже в этом случае даст импульс вверх, хотя этого делать нельзя. Элемент управления прыжком должен срабатывать только для стоящего на платформе персонажа. А значит, нужно научиться определять, стоит ли персонаж на поверхности.

image


image

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

6.5. Дополнительные возможности для платформера


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

ПРОЕКТИРОВАНИЕ УРОВНЕЙ ПРИ ПОМОЩИ ИНСТРУМЕНТА TILEMAP_ ______

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


image


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

Официальный инструмент tilemap добавлен в последние версии приложения Unity. Можно использовать и внешние библиотеки, например Tiled2Unity, систему, которая импортирует карты, созданные в популярном (и бесплатном) редакторе Tiled.

6.5.1. Наклонные и односторонние платформы


Сейчас в нашей игре есть только обычный пол и блок, через который можно перепрыгнуть. Но существуют и другие варианты платформ. Воспользуемся ими, чтобы разнообразить сцену. Начнем с наклонного участка. Создайте копию объекта Floor, присвойте ей имя Slope, введите в поля преобразования вращения значения 0, 0, -25 и сдвиньте ее влево, присвоив координатам преобразования перемещения значения –3.47, –1.27, 0.

Запустите воспроизведение сцены. В процессе движения персонаж корректно скользит вверх и вниз. Но из-за силы тяжести он начинает скользить вниз и в статичном состоянии. Для решения этой проблемы следует отключить имитацию силы тяжести в случаях, когда персонаж (a) стоит на платформе, (b) находится в состоянии покоя. К счастью, мы уже научили его распознавать поверхности и можем воспользоваться этим в новом фрагменте кода. Нужно добавить всего одну строку.

image


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

Односторонние платформы часто встречаются в играх, поэтому в Unity есть средства их реализации. Если помните, ранее при добавлении компонента Platform Effector мы снимали флажок Use One Way. А вот теперь он нам потребуется! Еще раз создайте копию объекта Floor, присвойте ей имя Platform, введите в поля для масштаба значения 10, 1, 1 и поместите полученный объект над полом, указав для него координаты -1.68, 0.11, 0. И обязательно установите флажок Use One Way в разделе Platform Effector 2D.

Персонаж сможет пролететь сквозь платформу при прыжке вверх, но движению вниз она воспрепятствует. Нужно устранить только один недостаток. Его иллюстрирует рис. 6.11. В Unity спрайт платформы может отобразиться поверх персонажа (чтобы было проще это увидеть, присвойте переменной jumpForce значение 7. Можно отредактировать координату Z персонажа, как это было сделано в предыдущей главе, но на этот раз поступим по-другому. У компонента, отвечающего за визуализацию спрайтов, существует порядок сортировки, определяющий, какой спрайт будет демонстрироваться сверху. Выделите объект Player и присвойте параметру Order in Layer в разделе Sprite Renderer значение 1.

image


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

6.5.2. Движущиеся платформы


Третий вариант необычного пола, распространенный в платформенных играх, — это движущиеся платформы. Чтобы добавить в нашу игру такую платформу, потребуется, во-первых, написать новый сценарий, контролирующий ее перемещения, во-вторых, отредактировать сценарий движения персонажа. В новом сценарии платформа будет перемещаться между двумя точками: начальной и конечной. Создайте сценарий C# с именем MovingPlatform и добавьте в него следующий код.

image


image


DRAWING CUSTOM GIZMOS _________________________________________

Большая часть кода, который пишется в процессе чтения книги, программирует происходящее в играх. Но сценарии Unity позволяют влиять и на встроенный редактор. Многие не знают, что в Unity можно добавлять дополнительные меню и окна. Более того, с их помощью создаются вспомогательные объекты на вкладке Scene, которые называются габаритными контейнерами (gizmos).

С габаритными контейнерами вы уже сталкивались. Помните зеленые параллелепипеды, обозначающие коллайдеры? Они встроены в Unity, но никто не мешает вам написать сценарий для собственного габаритного контейнера. К примеру, создадим на вкладке Scene линию, соответствующую траектории перемещения платформы. Она показана на рисунке.


image


Код, рисующий такую линию, очень прост. В верхнюю часть кода, влияющего на интерфейс Unity, нужно добавить строку using UnityEditor; (потому что большинство функций редактора находится именно в этом пространстве имен), но в данном случае этого не требуется. Просто добавьте этот метод в сценарий MovingPlatform:

...
void OnDrawGizmos() {
   Gizmos.color = Color.red;
   Gizmos.DrawLine(transform.position, finishPos);
}
...


Про этот код важно понимать следующее. Во-первых, все действие совершается внутри метода OnDrawGizmos (). Это системное имя, как и имена методов Start и Update. Во-вторых, мы добавляем в этот метод две строки кода: первая задает цвет линии, а вторая заставляет Unity нарисовать линию от места, где находится платформа, до целевой точки.

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

image


Теперь запрыгнувший на платформу персонаж будет перемещаться вместе с ней. По сути, все свелось к превращению персонажа в дочерний по отношению к платформе объект. Надеюсь, вы помните, что после формирования иерархической связи дочерний объект начинает перемещаться вслед за родительским. Метод GetComponent () в листинге 6.7 проверяет, является ли распознанная поверхность движущейся платформой. В случае положительного результата проверки она становится предком по отношению к персонажу; в противном случае персонаж отсоединяется от любого предка.

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

image


image


Математически компенсация масштабирования выглядит очень просто: игроку присваивается 1, деленная на масштаб платформы. И когда чуть позже масштаб игрока умножается на масштаб платформы, в итоге получается 1. Единственный сложный момент в данном случае состоит в учете знака, определяющего направление движения; возможно, вы помните, что в зависимости от него персонаж поворачивался из стороны в сторону.

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

» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок

Для Хаброжителей скидка 20% по купону — Unity

P.S.: 7% от стоимости книги пойдет на перевод новых компьютерных книг, список сданных в типографию книг здесь.

© Habrahabr.ru