- •Предисловие
- •Введение
- •Благодарности
- •О книге
- •Перспективы
- •Условные обозначения, требования и доступные для скачивания данные
- •Автор в Интернете
- •Об авторе
- •Глава 1. Знакомство с Unity
- •1.1. Достоинства Unity
- •1.1.1. Сильные стороны и преимущества Unity
- •1.1.2. Недостатки, о которых нужно знать
- •1.1.3. Примеры игр на основе Unity
- •1.2. Как работать с Unity
- •1.2.1. Вкладка Scene, вкладка Game и панель инструментов
- •1.2.2. Работа с мышью и клавиатурой
- •1.2.3. Вкладка Hierarchy и панель Inspector
- •1.2.4. Вкладки Project и Console
- •1.3. Готовимся программировать в Unity
- •1.3.1. Запуск кода в Unity: компоненты сценария
- •1.3.2. Программа MonoDevelop — межплатформенная среда разработки
- •1.4. Заключение
- •Глава 2. Создание 3D-ролика
- •2.1. Подготовка…
- •2.1.1. Планирование проекта
- •2.1.2. Трехмерное координатное пространство
- •2.2. Начало проекта: размещение объектов
- •2.2.1. Декорации: пол, внешние и внутренние стены
- •2.2.2. Источники света и камеры
- •2.2.3. Коллайдер и точка наблюдения игрока
- •2.3. Двигаем объекты: сценарий, активирующий преобразования
- •2.3.1. Схема программирования движения
- •2.3.2. Написание кода
- •2.3.3. Локальные и глобальные координаты
- •2.4. Компонент сценария для осмотра сцены: MouseLook
- •2.4.1. Горизонтальное вращение, следящее за указателем мыши
- •2.4.2. Поворот по вертикали с ограничениями
- •2.4.3. Одновременные горизонтальное и вертикальное вращения
- •2.5. Компонент для клавиатурного ввода
- •2.5.1. Реакция на нажатие клавиш
- •2.5.2. Независимая от скорости работы компьютера скорость перемещений
- •2.5.4. Ходить, а не летать
- •2.6. Заключение
- •3.1. Стрельба путем бросания лучей
- •3.1.1. Что такое бросание лучей?
- •3.1.2. Имитация стрельбы командой ScreenPointToRay
- •3.1.3. Добавление визуальных индикаторов для прицеливания и попаданий
- •3.2. Создаем активные цели
- •3.2.1. Определяем точку попадания
- •3.2.2. Уведомляем цель о попадании
- •3.3. Базовый искусственный интеллект для перемещения по сцене
- •3.3.1. Диаграмма работы базового искусственного интеллекта
- •3.3.2. «Поиск» препятствий методом бросания лучей
- •3.3.3. Слежение за состоянием персонажа
- •3.4.1. Что такое шаблон экземпляров?
- •3.4.2. Создание шаблона врага
- •3.4.3. Экземпляры невидимого компонента SceneController
- •3.5. Стрельба путем создания экземпляров
- •3.5.1. Шаблон снаряда
- •3.5.2. Стрельба и столкновение с целью
- •3.5.3. Повреждение игрока
- •3.6. Заключение
- •Глава 4. Работа с графикой
- •4.1. Основные сведения о графических ресурсах
- •4.2. Создание геометрической модели сцены
- •4.2.1. Назначение геометрической модели
- •4.2.2. Рисуем план уровня
- •4.2.3. Расставляем примитивы в соответствии с планом
- •4.3. Наложение текстур
- •4.3.1. Выбор формата файла
- •4.3.2. Импорт файла изображения
- •4.3.3. Назначение текстуры
- •4.4. Создание неба с помощью текстур
- •4.4.1. Что такое скайбокс?
- •4.4.2. Создание нового материала для скайбокса
- •4.5. Собственные трехмерные модели
- •4.5.1. Выбор формата файла
- •4.5.2. Экспорт и импорт модели
- •4.6. Системы частиц
- •4.6.1. Редактирование параметров эффекта
- •4.6.2. Новая текстура для пламени
- •4.6.3. Присоединение эффектов частиц к трехмерным объектам
- •4.7. Заключение
- •5.1. Подготовка к работе с двухмерной графикой
- •5.1.1. Подготовка проекта
- •5.1.2. Отображение двухмерных изображений (спрайтов)
- •5.1.3. Переключение камеры в режим 2D
- •5.2. Создание карт и превращение их в интерактивные объекты
- •5.2.1. Создание объекта из спрайтов
- •5.2.2. Код ввода с помощью мыши
- •5.2.3. Открытие карты по щелчку
- •5.3. Отображение различных карт
- •5.3.1. Программная загрузка изображений
- •5.3.3. Создание экземпляров карт
- •5.3.4. Тасуем карты
- •5.4. Совпадения и подсчет очков
- •5.4.1. Сохранение и сравнение открытых карт
- •5.4.2. Скрытие несовпадающих карт
- •5.4.3. Текстовое отображение счета
- •5.5. Кнопка Restart
- •5.5.1. Добавление к компоненту UIButton метода SendMessage
- •5.5.2. Вызов метода LoadLevel в сценарии SceneController
- •5.6. Заключение
- •Глава 6. Двухмерный GUI для трехмерной игры
- •6.1. Перед тем как писать код…
- •6.1.1. IMGUI или усовершенствованный 2D-интерфейс?
- •6.1.2. Выбор компоновки
- •6.1.3. Импорт изображений UI
- •6.2. Настройка GUI
- •6.2.1. Холст для интерфейса
- •6.2.2. Кнопки, изображения и текстовые подписи
- •6.2.3. Управление положением элементов UI
- •6.3. Программирование интерактивного UI
- •6.3.1. Программирование невидимого объекта UIController
- •6.3.2. Создание всплывающего окна
- •6.3.3. Задание значений с помощью ползунка и поля ввода
- •6.4. Обновление игры в ответ на события
- •6.4.1. Интегрирование системы сообщений
- •6.4.2. Рассылка и слушание сообщений сцены
- •6.4.3. Рассылка и слушание сообщений проекционного дисплея
- •6.5. Заключение
- •7.1. Корректировка положения камеры
- •7.1.1. Импорт персонажа
- •7.1.2. Добавление в сцену теней
- •7.1.3. Облет камеры вокруг персонажа
- •7.2. Элементы управления движением, связанные с камерой
- •7.2.1. Поворот персонажа лицом в направлении движения
- •7.2.2. Движение вперед в выбранном направлении
- •7.3. Выполнение прыжков
- •7.3.1. Добавление вертикальной скорости и ускорения
- •7.3.2. Распознавание поверхности с учетом краев и склонов
- •7.4. Анимация персонажа
- •7.4.1. Создание анимационных клипов для импортированной модели
- •7.4.2. Создание контроллера для анимационных клипов
- •7.4.3. Код, управляющий контроллером-аниматором
- •7.5. Заключение
- •8.1. Создание дверей и других устройств
- •8.1.1. Открывание и закрывание дверей
- •8.1.2. Проверка расстояния и направления перед открытием двери
- •8.1.3. Управление меняющим цвет монитором
- •8.2. Взаимодействие с объектами путем столкновений
- •8.2.1. Столкновение с препятствиями, обладающими физическими свойствами
- •8.2.2. Управление дверью с помощью триггера
- •8.2.3. Сбор разбросанных по игровому уровню элементов
- •8.3. Управление инвентаризационными данными и состоянием игры
- •8.3.1. Настраиваем диспетчеры игрока и инвентаря
- •8.3.2. Программирование диспетчеров
- •8.3.3. Сохранение инвентаря в виде коллекции: списки и словари
- •8.4. Интерфейс для использования и подготовки элементов
- •8.4.1. Отображение элементов инвентаря в UI
- •8.4.2. Подготовка ключа для открытия двери
- •8.4.3. Восстановление здоровья персонажа
- •8.5. Заключение
- •9.1. Создание натурной сцены
- •9.1.1. Генерирование неба с помощью скайбокса
- •9.1.2. Настройка управляемой кодом атмосферы
- •9.2. Скачивание сводки погоды из Интернета
- •9.2.1. Запрос веб-данных через сопрограмму
- •9.2.2. Парсинг текста в формате XML
- •9.2.3. Парсинг текста в формате JSON
- •9.2.4. Изменение вида сцены на базе данных о погоде
- •9.3. Добавление рекламного щита
- •9.3.1. Загрузка изображений из Интернета
- •9.3.2. Вывод изображения на щите
- •9.3.3. Кэширование скачанного изображения
- •9.4. Отправка данных на веб-сервер
- •9.4.1. Слежение за погодой: отправка запросов POST
- •9.4.2. Серверный код в PHP-сценарии
- •9.5. Заключение
- •Глава 10. Звуковые эффекты и музыка
- •10.1. Импорт звуковых эффектов
- •10.1.1. Поддерживаемые форматы файлов
- •10.1.2. Импорт аудиофайлов
- •10.2. Воспроизведение звуковых эффектов
- •10.2.1. Система воспроизведения: клипы, источник, подписчик
- •10.2.2. Присваивание зацикленного звука
- •10.2.3. Активация звуковых эффектов из кода
- •10.3. Интерфейс управления звуком
- •10.3.1. Настройка центрального диспетчера управления звуком
- •10.3.2. UI для управления громкостью
- •10.3.3. Воспроизведение звуков UI
- •10.4. Фоновая музыка
- •10.4.1. Воспроизведение музыкальных циклов
- •10.4.2. Отдельная регулировка громкости
- •10.4.3. Переход между песнями
- •10.5. Заключение
- •Глава 11. Объединение фрагментов в готовую игру
- •11.1. Построение ролевого боевика изменением назначения проектов
- •11.1.1. Сборка ресурсов и кода из разных проектов
- •11.1.2. Элементы наведения и щелчка
- •11.1.3. Замена старого GUI новым
- •11.2. Разработка общей игровой структуры
- •11.2.1. Управление ходом миссии и набором уровней
- •11.2.2. Завершение уровня
- •11.2.3. Проигрыш уровня
- •11.3. Обработка хода игры
- •11.3.1. Сохранение и загрузка достижений игрока
- •11.3.2. Победа в игре при прохождении всех уровней
- •11.4. Заключение
- •Глава 12. Развертывание игр на устройствах игроков
- •12.1. Создание приложений для настольных компьютеров: Windows, Mac и Linux
- •12.1.1. Построение приложения
- •12.1.2. Настройки проигрывателя: имя и значок приложения
- •12.1.3. Компиляция в зависимости от платформы
- •12.2. Создание игр для Интернета
- •12.2.1. Проигрыватель Unity и HTML5/WebGL
- •12.2.2. Создание файла Unity и тестовой веб-страницы
- •12.2.3. Обмен данными с JavaScript в браузере
- •12.3. Сборки для мобильных устройств: iOS и Android
- •12.3.1. Настройка инструментов сборки
- •12.3.2. Сжатие текстур
- •12.3.3. Разработка подключаемых модулей
- •12.4. Заключение
- •Приложение А. Перемещение по сцене и клавиатурные комбинации
- •А.1. Навигация с помощью мыши
- •А.2. Распространенные клавиатурные комбинации
- •Б.1. Инструменты программирования
- •Б.1.1. Visual Studio
- •Б.1.2. Xcode
- •Б.1.3. Android SDK
- •Б.1.4. SVN, Git или Mercurial
- •Б.2. Приложения для работы с трехмерной графикой
- •Б.2.1. Maya
- •Б.2.3. Blender
- •Б.3. Редакторы двухмерной графики
- •Б.3.1. Photoshop
- •Б.3.2. GIMP
- •Б.3.3. TexturePacker
- •Б.4. Звуковое программное обеспечение
- •Б.4.1. Pro Tools
- •Б.4.2. Audacity
- •Приложение В. Моделирование скамейки в программе Blender
- •В.1. Создание сеточной геометрии
- •В.2. Назначение материала
О книге
Эта книга посвящена программированию игр с помощью Unity. Ее можно считать введением в Unity для опытных программистов. Цель книги крайне проста: научить людей, имеющих опыт программирования, но ни разу не сталкивавшихся с Unity, разрабатывать игры с помощью этого инструмента.
Учить разработке лучше всего на примерах проектов, заставляя обучающихся выполнять практические задания, и именно такой подход используется в данном случае. Темы представлены как этапы построения отдельных игр, и я настоятельно рекомендую вам в процессе знакомства с книгой заняться разработкой этих игр при помощи Unity. Мы рассмотрим ряд проектов, каждому из которых посвящено несколько глав. Бывают книги, целиком посвященные одному крупному проекту, но такой подход исключает возможность чтения с середины, если информация в первых главах покажется вам неинтересной.
В этой книге более строго, чем в большинстве других изданий (особенно предназначенных для начинающих), изложен материал, касающийся программирования. Unity зачастую представляют как набор компонентов, не требующих программирования, что в корне неверно, так как не дает людям знаний, без которых невозможно производство коммерчески успешных продуктов. Если вы пока не имеете навыков программирования, советую сначала их приобрести и только после этого приступать к чтению.
Выбор языка программирования не имеет особого значения; все примеры в книге написаны на C#, но они легко переводятся на другие языки. Первая половина книги в изрядной степени посвящена знакомству с новыми понятиями, и первые шаги по разработке игры с помощью Unity намеренно описаны со всей возможной тщательностью, но затем повествование ускоряется, давая читателям возможность выполнять проекты в различных игровых жанрах. Завершает книгу описание развертывания игр на различных платформах, но в целом мы не будем делать упор на этом аспекте, так как Unity не зависит от платформы.
Что касается прочих аспектов разработки игр, излишне широкий охват различных художественных дисциплин привел бы к сокращению объема представленного в книге конкретного материала по Unity и в значительной степени относился бы к внешним по отношению к Unity программам (например, программам создания анимации). Поэтому обсуждение художественных дисциплин сводится к тем аспектам, которые имеют непосредственное отношение к Unity или должны быть известны всем разработчикам игр. (Впрочем, одно из приложений посвящено моделированию собственных нестандартных объектов.)
16 О книге
Перспективы
Глава 1 знакомит вас с Unity — межплатформенной средой разработки игр. Вы освоите базовую систему компонентов, лежащую в основе Unity, а также научитесь писать и выполнять базовые сценарии.
Вглаве 2 мы перейдем к написанию программы, демонстрирующей движение в трехмерном пространстве, попутно рассмотрев такие темы, как ввод с помощью мыши и клавиатуры. Детально объясняется определение положения объектов в трехмерном пространстве и операции их поворота.
Вглаве 3 мы превратим демонстрационную программу в шутер от первого лица, познакомив вас с методом испускания луча и основами искусственного интеллекта. Испускание луча (мы создаем в сцене линию и смотрим, с чем она пересечется) требуется во всех вариантах игр.
Глава 4 посвящена импорту и созданию игровых ресурсов. Это единственная глава в книге, в которой код не играет центральной роли, так как каждому проекту требуются (базовые) модели и текстуры.
Глава 5 научит вас создавать в Unity двухмерные игры. Хотя изначально этот инструмент предназначался исключительно для создания трехмерной графики, сейчас в нем прекрасно поддерживается двухмерная графика.
Глава 6 знакомит с новейшей GUI-функциональностью в Unity. Пользовательский интерфейс требуется всем играм, а последние версии Unity могут похвастаться улучшенной системой создания пользовательского интерфейса.
В главе 7 мы создадим еще одну программу, демонстрирующую движение в трехмерном пространстве, однако на этот раз с точки зрения стороннего наблюдателя. Реализация элементов управления третьим лицом даст вам представление о ключевых математических операциях в трехмерном пространстве, кроме того, вы научитесь работать с анимированными персонажами.
Глава 8 покажет способы реализации интерактивных устройств и элементов в игре. У игрока будет ряд способов применения этих устройств, в том числе прямым касанием, прикосновением к пусковым устройствам внутри игры или нажатием кнопки контроллера.
Глава 9 учит взаимодействию со Всемирной паутиной. Вы узнаете, как отправить и получить данные с помощью стандартных технологий, таких как HTTP-запросы на получение с сервера XML-данных.
Вглаве 10 вы научитесь добавлять в игры звук. В Unity замечательно поддерживаются как короткие звуковые эффекты, так и долгие музыкальные фонограммы; оба варианта звукового сопровождения критически важны почти для всех видеоигр.
Вглаве 11 мы соберем воедино фрагменты из различных глав, чтобы получить в итоге одну игру. Кроме того, вы научитесь программировать элементы управления, манипуляция которыми осуществляется с помощью мыши, и сохранять игру.
Глава 12 демонстрирует процесс создания итогового приложения с его последующим развертыванием на различных платформах, таких как настольные компьютеры,
Автор в Интернете 17
Интернет и мобильные устройства. Unity обладает поразительной независимостью от конкретной платформы, позволяя создавать любые варианты игр!
Затем идут три приложения с дополнительной информацией о навигации по сцене, внешних инструментах и пакете Blender.
Условные обозначения, требования и доступные для скачивания данные
Весь код в этой книге, как в листингах, так и в представленных фрагментах, набран вот таким шрифтом фиксированной ширины, позволяющим отличить код от остального текста. Большинство листингов снабжено примечаниями, отмечающими ключевые понятия, кроме того, в тексте периодически встречаются маркированные списки с дополнительными сведениями по поводу кода. Код отформатирован при помощи переносов строки и аккуратных отступов в соответствии с шириной страницы.
Единственной программой, которая вам потребуется, является Unity; в книге используется версия Unity 5.0, которая являлась самой последней на момент написания этого текста. В некоторых главах время от времени обсуждаются другие программы, но это всегда дополнительная информация, не оказывающая решающего влияния на изучение основного материала.
ВНИМАНИЕ В Unity-проектах сохраняется информация о том, в какой версии программы они были созданы, и при попытке открыть их в другой версии выводят предупреждение. Если, открыв относящиеся к этой книге материалы, скачанные из Сети, вы увидите такое предупреждение, просто щелкните на кнопке Continue.
Встречающиеся в книге фрагменты кода в общем случае демонстрируют добавления и изменения, вносимые в существующие файлы; если это не первое появление файла с кодом, не следует заменять файл соответствующим листингом. Можно просто скачать рабочий проект целиком, но обучение пойдет намного быстрее, если вы будете набирать все листинги вручную, используя примеры из проекта только для сравнения. Весь код доступен для скачивания на сайте издателя по адресу www.manning.com/ UnityinAction.
Автор в Интернете
На странице www.manning.com/UnityinAction вы найдете информацию о том, как попасть на форум после регистрации, на какую помощь вы можете рассчитывать, а также о правилах поведения на форуме.
Издательство Manning взяло на себя обязательство по предоставлению места, где читатели могут конструктивно пообщаться как друг с другом, так и с автором книги. Но оно не может гарантировать присутствия на форуме автора, участие которого в обсуждениях является добровольным (и неоплачиваемым). Мы надеемся, что вы будете задавать автору по-настоящему трудные вопросы, чтобы его интерес к общению не угас!
18 О книге
Как форум, так и архивы предшествующих обсуждений будут доступны на сайте издательства до тех пор, пока книга находится в продаже.
Об авторе
Джозеф Хокинг живет в Чикаго и занимается разработкой программного обеспечения для интерактивных сред. Он работает в фирме Synapse Games, создавая интер- нет-игры и игры для мобильных устройств, такие как недавно вышедшая игра-стра- тегия Tyrant Unleashed. Кроме того, он преподает предмет разработки игр в колледже Колумбия в Чикаго. Его сайт www.newarteest.com.
Ч а с т ь I ПЕРВЫЕ ШАГИ
Итак, пришло время познакомиться с Unity. Ничего страшного, если вы не имеете представления о том, что это за инструмент! Я начну с его подробного описания, рассказывая в числе прочего об основах программирования игр с помощью Unity. Затем вы получите инструкцию по разработке простой игры. Первый проект познакомит вас с набором приемов, попутно дав представление об общем ходе процесса.
Приступим к главе 1!