Хабрахабр

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Кроме того, вы научитесь программировать элементы управления, манипуляция которыми осуществляется с помощью мыши, и сохранять игру. В главе 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

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

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

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

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

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

image

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

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

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

image

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

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

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

image

image

DRAWING CUSTOM GIZMOS _________________________________________

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

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

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

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»