- •Предисловие
- •Введение
- •Благодарности
- •О книге
- •Перспективы
- •Условные обозначения, требования и доступные для скачивания данные
- •Автор в Интернете
- •Об авторе
- •Глава 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. Назначение материала
4 Работа с графикой
33 Основные сведения о графических ресурсах
33 Процесс создания геометрической модели сцены
33 Использование в Unity двухмерных изображений
33 Импорт собственных трехмерных моделей
33 Моделирование эффектов частиц
Пока что мы рассматривали в основном принципы функционирования игры, не обращая особого внимания на то, как она выглядит. И это не случайно, ведь книга посвящена программированию игр в Unity. Тем не менее важно знать, каким образом создается и улучшается визуальная картинка. В следующей главе мы вернемся к основной теме — написанию кода для различных частей игры, — а пока поговорим о такой вещи, как графика, чтобы ваши проекты не превращались в набор одинаковых с виду примитивов, плавно перемещающихся по сцене.
Все, что составляет визуальное содержимое игры, называется графическими ресурсами (art assets). Но что именно скрывается за этим термином?
4.1. Основные сведения о графических ресурсах
Графическим ресурсом называется отдельная единица визуальной информации (обычно — файл), используемая игрой. Это всеобъемлющее собирательное название для всего визуального содержимого; к графическим ресурсам относятся файлы изображений, трехмерные модели и т. п. На самом деле, это всего лишь частный случай ресурса, который, как вы знаете, представляет собой любой используемый игрой файл (например, сценарий). Все они в Unity находятся в основной папке Assets. В табл. 4.1 перечислены и описаны пять основных видов графических ресурсов, применяемых при создании игр.
|
4.1. Основные сведения о графических ресурсах 89 |
|
|
Таблица 4.1. Типы игровых ресурсов |
|
|
|
Тип |
Определение типа |
|
|
Двухмерное |
Плоские изображения. В реальном мире им соответствуют картины |
изображение |
и фотографии |
|
|
Трехмерная |
Виртуальные трехмерные объекты (почти синоним для «сеточных |
модель |
объектов»). В реальном мире им соответствуют скульптуры |
|
|
Материал |
Пакет информации, определяющий свойства поверхности любого объекта, |
|
к которому присоединен материал. К таким свойствам относят цвет, блеск |
|
и даже небольшие шероховатости |
|
|
Анимация |
Пакет информации, определяющий движение связанного с ним объекта. |
|
Существуют как заблаговременно созданные детализированные |
|
последовательности перемещений, так и код, вычисляющий положения |
|
объектов «на лету» |
|
|
Система частиц |
Механизм создания большого количества небольших движущихся объектов |
|
и управления ими. Позволяет создавать различные визуальные эффекты, |
|
такие как огонь, дым и водяные брызги |
|
|
Создание графики для новой игры в общем случае начинается с двухмерных изображений или трехмерных моделей, так как эти ресурсы формируют базу для всего остального. Как несложно догадаться, двухмерные изображения служат основой для двухмерной графики, в то время как трехмерные модели — для трехмерной. Точнее говоря, двухмерные изображения представляют собой плоские картинки. Даже если у вас нет представления о графике, используемой в играх, с ними вы, скорее всего, сталкивались, например на сайтах. При этом трехмерные модели могут оказаться совершенно незнакомым новичкам понятием, поэтому я дам им определение.
ОПРЕДЕЛЕНИЕ Модель (model) — это трехмерный виртуальный объект. В главе 1 вы столкнулись с термином «сеточный объект»; трехмерная модель — это практически синоним. Оба термина часто используются в одном и том же значении, но термин «сеточный объект» относится исключительно к геометрии трехмерных объектов (соединенные друг с другом линии и фигуры), в то время как термин «модель» имеет более общий смысл и часто подразумевает и другие атрибуты объекта.
Следующие два типа ресурсов в нашем списке — это материалы и анимация. В отличие от двухмерных изображений и трехмерных моделей они не имеют смысла сами по себе, поэтому новичкам бывает непросто понять, что это такое. Изображения и модели легко представимы благодаря аналогам из реального мира. Первым соответствуют картины, вторым — скульптуры. Материалы и анимация не имеют прямых ассоциаций с реальными объектами. Это абстрактные пакеты информации, накладываемые на трехмерные модели. Например, базовый смысл материалов уже был рассмотрен в главе 3.
ОПРЕДЕЛЕНИЕ Материалом (material) называется пакет информации, определяющий свойства поверхности любого трехмерного объекта, к которому он присоединяется. К таким свойствам относятся, к примеру, цвет, блеск и даже небольшая шероховатость.
Если продолжить аналогию с искусством, материал можно представить как вещество (глина, бронза, мрамор и т. п.), из которого создается скульптура. Подобным
90 Глава 4. Работа с графикой
же образом анимация представляет собой присоединяемый к видимому объекту абстрактный слой информации.
ОПРЕДЕЛЕНИЕ Анимацией (animation) называется пакет информации, определяющий движение связанного с ним объекта. Так как эти движения можно задать независимо от объекта, их можно использовать, сочетая и комбинируя с различными объектами.
В качестве конкретного примера рассмотрим перемещающийся по сцене персонаж. Его положение в каждый момент определяется кодом игры (например, сценариями движения, которые вы писали в главе 2). Но подробные движения ног, ступающих по земле, размахивающих рук и поворачивающихся бедер представляют собой воспроизводимые в цикле анимационные последовательности, которые и являются графическим ресурсом.
Чтобы понять, как связаны друг с другом анимация и трехмерные модели, представьте себе кукольный театр: трехмерная модель будет куклой, аниматор — кукольником, заставляющим ее двигаться, а анимация — записью движений куклы. Определенные таким способом движения записываются заранее и обычно происходят в небольшом масштабе, не меняя общего положения объекта. Это отличается от крупномасштабных перемещений, которые мы программировали в предыдущих главах.
Последний графический ресурс, упоминавшийся в табл. 4.1, — это система частиц.
ОПРЕДЕЛЕНИЕ Системой частиц (particle system) называется механизм создания большого количества движущихся объектов и управления ими. Обычно эти объекты имеют маленький размер — именно поэтому они называются частицами, хотя это не является обязательным условием.
Системы частиц служат для создания таких визуальных эффектов, как огонь, дым или водяные брызги. Роль частиц (то есть отдельных объектов, контролируемых системой) может играть любой сеточный объект, но для большинства эффектов достаточно квадрата, воспроизводящего изображение (например, искры пламени или клуба дыма).
В основном создание графики для игры выполняется во внешних программах, никак не связанных с Unity. В Unity можно генерировать только материалы и системы частиц. Список внешних программ вы найдете в приложении Б; для создания трехмерных моделей и анимации применяются самые разные графические редакторы. Полученные во внешней программе трехмерные модели затем сохраняются как графические ресурсы, то есть импортируются в Unity. Я пользуюсь программой Blender, о которой рассказывается в приложении В. Ее можно скачать с сайта www.blender.org. Мой выбор обусловлен тем, что эта программа с открытым исходным кодом, бесплатно доступная всем желающим.
ПРИМЕЧАНИЕ Проект, который можно скачать для этой главы, включает в себя папку с именем scratch. Хотя эта папка помещена в проект Unity, она не является его частью; я поместил в эту папку дополнительные внешние файлы.
Работая над проектом этой главы, вы познакомитесь с примерами большинства типов графических ресурсов (анимация пока относится к слишком сложным темам,