Unity в действии. Мультиплатформенная разработка на C
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабын онлайн тегін оқу  Unity в действии. Мультиплатформенная разработка на C

 

Джозеф Хокинг
Unity в действии. Мультиплатформенная разработка на C#. 3-е межд. издание
2023

Переводчик С. Черников


 

Джозеф Хокинг

Unity в действии. Мультиплатформенная разработка на C#. 3-е межд. издание. — СПб.: Питер, 2023.

 

ISBN 978-5-4461-2266-0

© ООО Издательство "Питер", 2023

 

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

 

Предисловие

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

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

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

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

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

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

Джесси Шелл (Jesse Schell), руководитель Schell Games, автор книги Art of Game Design

Введение

Программированием игр я занимаюсь уже много лет, но с Unity познакомился относительно недавно. Разработку игр я осваивал во времена, когда такого движка попросту не существовало; первая версия была выпущена только в 2005 году. С самого начала это был многообещающий инструмент разработки, но всеобщее признание он получил лишь после выхода нескольких версий. В частности, такие платформы, как iOS и Android (называемые мобильными), появились не так давно, и именно они повлияли на рост популярности Unity.

Изначально я рассматривал Unity как диковинный инструмент разработки, за развитием которого было интересно понаблюдать, но не использовать. В то время я писал игры для настольных компьютеров и сайтов, выполняя проекты для широкого круга клиентов. Я пользовался такими инструментами, как Blitz3D и Adobe Flash, удобными для программирования, но ограниченными в ряде других аспектов. Но по мере их устаревания я стал искать более совершенные средства разработки игр.

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

Я всегда понимал важность передачи знаний, поэтому последние годы занялся преподаванием разработки игр. Во многом это обусловлено примерами, которые подавали мои наставники и преподаватели (возможно, об одном из моих учителей вы слышали — Рэнди Пауш (Randy Pausch) — незадолго до своей кончины в 2008 году он прочитал свою «Последнюю лекцию»). Я преподавал в нескольких школах и всегда хотел написать книгу о разработке игр.

Эта книга — отражение того, о чем я мечтал во времена моего изучения Unity. Одним из многочисленных достоинств Unity является огромное количество обучающих ресурсов, но, как правило, они представляют собой наборы отдельных фрагментов (ссылки на сценарии или не связанные друг с другом уроки), которые затрудняют поиск нужного материала. Мне же всегда хотелось получить книгу, объединяющую все необходимые знания, представленные в четкой и логически связанной манере, поэтому я написал такую книгу для вас. Моя целевая аудитория — это люди, уже имеющие навыки программирования, но не обладающие опытом работы с Unity и, возможно, никогда не занимавшиеся разработкой игр. Выбор проектов отражает мой опыт наработки навыков и уверенности в себе, который я в свое время получил, выполняя различные заказы в достаточно быстром темпе.

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

Благодарности

Я хотел бы поблагодарить издательство Manning Publications за предоставленную мне возможность написать данную книгу. В этом мне помогли редакторы, с которыми я работал, в том числе Робин де Йон (Robin de Jongh) и особенно Дэн Махари (Dan Maharry). Именно взаимодействие с ними сделало книгу намного лучше. Бекки Уитни (Becky Whitney) взяла на себя обязанности главного редактора третьего издания, в то время как Кэндис Уэст (Candace West) выполняла эту роль во втором издании. Мои искренние благодарности и многим другим людям, сотрудничавшим со мной в процессе написания и издания: Дейрдре Хиаму (Deirdre Hiam) — редактору проекта; Шэрон Уилки (Sharon Wilkey) — выпускающему редактору; Джейсону Эверетту (Jason Everett) — корректору и Михаэле Батинич (Mihaela Batinić) — ответственному редактору.

Книга только выиграла от пристального внимания рецензентов. Спасибо Аарону Шарим Рани (Aharon Sharim Rani), Алену Куньо (Alain Couniot), Алену Ломпо (Alain Lompo), Альберто Симоэсу (Alberto Simões), Брэдли Ирби (Bradley Irby), Бренту Бойлану (Brent Boylan), Крису Лундбергу (Chris Lundberg), Кристиану Антониоли (Cristian Antonioli), Дэвиду Московицу (David Moskowitz), Эрику Ханссону (Erik Hansson), Франческо Аргезе (Francesco Argese), Хильде ван Гизель (Hilde van Gysel), Джеймсу Мэтлоку (James Matlock), Яну Крокену (Jan Kroken), Джону Экли (John Ackley), Джону Гатри (John Guthrie), Хосе Сан Леандро (Jose San Leandro), Джозефу У. Уайту (Joseph W. White), Джастину Калледжа (Justin Calleja), Кенту Р. Спилнеру (Kent R. Spillner), Кришне Чайтанья Анипинди (Krishna Chaitanya Anipindi), Мартину Тидману (Martin Tidman), Максу Вайнбрауну (Max Weinbrown), Ненко Иванову Табакову (Nenko Ivanov Tabakov), Нику Кирсу (Nick Keers), Овайну Уильямсу (Owain Williams), Роберту Уолшу (Robert Walsh), Сатей Кумар Саху (Satej Kumar Sahu), Скотту Чоссе (Scott Chaussée) и Уолтеру Стоунбернеру (Walter Stoneburner). Отдельная благодарность техническому редактору Скотту Шоси (Scott Chaussee) и техническому корректору Кристоферу Хаупту (Christopher Haupt). Рене ван ден Берг (René van den Berg) и Шайло Моррис (Shiloh Morris) сыграли свою роль в выходе второго издания книги, а затем Рене был техническим корректором третьего издания, в то время как Робин Дьюсон занимался техническим редактированием. Хотелось бы также поблагодарить Джесси Шелл (Jesse Schell) за предисловие к книге.

Затем я хотел бы выразить свою признательность людям, помощь которых сделала мой опыт работы с Unity крайне плодотворным. Разумеется, этот список начинается с компании Unity Technologies, создавшей игровой движок Unity. Я также глубоко признателен и сообществу на сайте по разработке игр на Stack Exchange (https://gamedev.stackexchange.com). Данный сайт контроля качества я посещал практически ежедневно в период написания первого издания этой книги, учась у других и отвечая на чужие вопросы. Но сильнее всех к работе с Unity меня подтолкнул мой руководитель в фирме Synapse Games — Алекс Рива (Alex Reeve). Коллеги показали мне множество приемов и методов, которые я постоянно применяю при написании кода как в этой, так и во всех других работах, которыми я занимался с тех пор.

Наконец, я хотел бы поблагодарить мою жену Виргинию (Virginia) за оказанную мне поддержку. До начала работы над книгой я понятия не имел, насколько подобные проекты переворачивают твою жизнь, влияя на все ее стороны. Любимая, спасибо тебе за твою любовь и помощь!

О книге

Кому стоит прочитать эту книгу

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

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

В этой книге более подробно изложены материалы, касающиеся программирования, чем в большинстве других изданий по Unity (особенно предназначенных для начинающих). Зачастую Unity представляют как набор функций, не требующих особых навыков программирования, что в корне неверно, так как без них невозможно производство коммерчески успешных продуктов. Если вы пока не имеете соответствующего опыта, советую обратиться к одному из множества различных сайтов с «бесплатными интерактивными уроками кодирования» (например, https://learnprogramming.online) и после изучения основ вернуться к чтению этой книги.

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

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

Структура издания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

О коде

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

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

ВНИМАНИЕ В Unity-проектах сохраняется информация о том, в какой версии программы они были созданы, и при попытке открыть их в другой версии выводится предупреждение. Если, открыв относящиеся к этой книге материалы, скачанные из интернета, вы увидите такое предупреждение, просто нажмите кнопку Continue.

Встречающиеся в книге листинги кода обычно демонстрируют, что нужно добавить или изменить в существующих файлах. Если это не первое появление файла с кодом, не следует заменять его полностью соответствующими листингами. Достаточно скачать рабочий проект целиком, но обучение будет намного более эффективным, если вы будете набирать все листинги вручную, используя примеры из проекта исключительно для ознакомления. Весь код доступен для скачивания на сайте издателя (https://manning.com/books/unity-in-action-third-edition), а также на сайте GitHub (https://github.com/jhocking/uia-3e).

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу comp@piter.com (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Об авторе

Джо Хокинг (Joe Hocking) — инженер-программист, специализирующийся на разработке программного обеспечения (ПО) для интерактивных медиа. В настоящее время является сотрудником Qualcomm. Первое издание этой книги Джо написал, работая в Synapse Games, а большую часть книги, которую вы сейчас держите в руках, — уже будучи сотрудником BUNDLAR. Кроме того, он вел занятия в Университете Иллинойса в Чикаго, школе Института искусств Чикаго и Колумбийском колледже Чикаго. Джо живет в пригороде Чикаго с женой и двумя детьми. Его сайт: http://newarteest.com.

Иллюстрация на обложке

Книгу украшает иллюстрация, подписанная как «Облачение церемониймейстера Великого господина». Великим господином называли султана Османской империи. Иллюстрация взята из книги «Коллекция костюмов разных народов — античных и современных» Томаса Джеффериса, опубликованной в Лондоне между 1757 и 1772 годами. На титульном листе указано, что это раскрашенные вручную гравюры на меди, обработанные гуммиарабиком. Джефферис (1719–1771) носил звание «географ короля Георга III». Этот английский картограф был ведущим поставщиком карт того времени. Он гравировал и печатал их для нужд правительства и других официальных органов. Выпустил он и множество коммерческих карт и атласов, особенно Северной Америки. Он интересовался и национальной одеждой народов, населяющих исследуемые им земли, и собрал блестящую коллекцию различных нарядов, описав ее в четырех томах.

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

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

Часть I. Первые шаги

Настало время знакомства с Unity. Ничего страшного, если вы не имеете представления о том, что это такое! Я подробно опишу Unity и научу основам программирования игр с его помощью. Затем мы рассмотрим руководство по разработке простой игры в Unity. Первый проект познакомит вас с различными техниками, давая представление о том, как выглядит рабочий процесс. Итак, приступим к главе 1!