- •Предисловие
- •Введение
- •Благодарности
- •О книге
- •Перспективы
- •Условные обозначения, требования и доступные для скачивания данные
- •Автор в Интернете
- •Об авторе
- •Глава 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. Назначение материала
1.2. Как работать с Unity 27
1.2. Как работать с Unity
В предыдущем разделе мы много говорили о том, как выгоден встроенный в Unity визуальный редактор с точки зрения производительности, а сейчас пришло время познакомиться с его интерфейсом и узнать, как он работает. Если вы пока этого не сделали, скачайте программу со страницы http://unity3d.com/ru/get-unity и установите на свой компьютер (обязательно установите флажок Example Project, если установщик его сбросит). После этого запустите Unity, чтобы приступить к исследованию интерфейса.
Вам, скорее всего, потребуется пример, поэтому откройте соответствующий проект; при установке новой копии этот проект должен предлагаться автоматически, но вы можете выбрать в меню File команду Open Project и открыть его вручную. Он находится в пользовательской папке общего доступа, адрес которой в операционных системах семейства Windows выглядит примерно так: C:\Users\Public\Documents\Unity Projects\, а в Mac OS — так: Users/Shared/Unity/. Если заодно потребуется открыть пример сцены, дважды щелкните на файле Car (рис. 1.9 демонстрирует, что такие файлы в Unity обозначаются символом куба). Значок этого файла в средстве просмотра файлов, расположенном в нижней части редактора, находится по адресу SampleScenes/Scenes/. Вы должны получить экран, показанный на рис. 1.9.
В а Scene Game |
В • |
а ˆ ƒ а а |
|
|
а ˆ €. С а |
С а • а а-а |
|||
а а а |
а • •‹ , |
|||
а ˆ, • а‚а •а • аƒ |
||||
• • ƒ |
а ƒ а а-а а Play |
|||
а • |
||||
- |
|
|
||
|
|
•‹ |
||
|
|
|
Па ˆ Hierarchy • а‚а
• • •‹ƒ • а •.
Д а •‹ €‚
а• ˆ • а а€ а ˆ
В а Project Console
а а а
• •а• а
•• •, а а • • а
-а ,
В • а€ а а а‚ • а а ƒ Car
Рис. 1.9. Части интерфейса Unity
Интерфейс Unity разбит на несколько частей: вкладка Scene, вкладка Game, панель инструментов, вкладка Hierarchy, панель Inspector, вкладки Project и Console. У каждой
28 Глава 1. Знакомство с Unity
части есть собственное предназначение, при этом все они играют важную роль в цикле создания игры:
Просмотр файлов выполняется на вкладке Project.
Помещенные в трехмерную сцену объекты просматриваются на вкладке Scene.Панель инструментов предоставляет вам элементы управления сценой.
Менять взаимосвязи между объектами можно методом перетаскивания на вкладке Hierarchy.
Панель Inspector отображает информацию о выделенных объектах, в том числе и о связанном с ними коде.
Тестировать полученные результаты можно на вкладке Game, одновременно просматривая сообщения об ошибках на вкладке Console.
Эта компоновка предлагается по умолчанию; все доступные представления помещены на вкладки, которые можно перемещать, можно менять их размер и фиксировать в разных частях экрана. Чуть позже вы поэкспериментируете с выбором компоновки, пока же нам нужно понять назначение каждого элемента интерфейса, поэтому вариант, предлагаемый по умолчанию, является оптимальным.
1.2.1. Вкладка Scene, вкладка Game и панель инструментов
Наиболее заметной частью интерфейса является расположенная в центре вкладка Scene. Именно здесь можно видеть, как выглядит мир игры, и перемещать объекты в сцене. Сеточные объекты в сцене выглядят, как им и положено, в виде сеток. Также можно наблюдать и ряд других объектов, представленных различными значками и цветными линиями. Это камеры, источники света, источники звука, области столкновений и т. п. Разумеется, наблюдаемая тут картинка отличается от того, что вы будете видеть в процессе игры, — можно рассматривать сцену, не ограниваясь игровым представлением.
ОПРЕДЕЛЕНИЕ Сеточный объект (mesh object) — это визуализация объекта в трехмерном пространстве. Она создается из набора соединенных друг с другом линий и форм, которые формируют сетку.
Игровое представление отображается не на отдельной части экрана, а на вкладке Game, расположенной рядом с вкладкой Scene (переход с вкладки на вкладку осуществляется с помощью кнопок в верхнем левом углу области отображения). В интерфейсе есть и другие элементы, сконструированные подобным образом; для изменения отображаемого ими содержимого достаточно перейти на другую вкладку. После запуска игры начинает отображаться игровое представление, то есть вам не нужно переходить на вкладку Game — переключение выполняется автоматически.
СОВЕТ В режиме воспроизведения игры можно вернуться на вкладку Scene для просмотра объектов. Это крайне полезная возможность, позволяющая понять, как выглядит воспроизводимая игра изнутри и что в ней происходит. Подобный инструмент отладки отсутствует в большинстве игровых движков.
Для запуска игры достаточно щелкнуть на кнопке Play, расположенной над вкладкой Scene. Вся верхняя часть интерфейса занята так называемой панелью инструментов,
1.2. Как работать с Unity 29
и кнопка Play находится как раз в центре этой панели. Рисунок 1.10 получен отбрасыванием остальной части интерфейса редактора и демонстрирует только панель инструментов с расположенными под ней вкладками Scene и Game.
С а а |
В |
Па |
( а , а а |
|
|
а) |
|
|
И- |
|
|
|
|
|
Rect |
|
|
И |
|
|
Scale |
|
|
И |
|
|
Rotate |
|
И а |
И |
|
|
Translate |
|
|
И |
|
|
Navigate |
|
С • • |
scene |
|
|
Рис. 1.10. Усеченный вариант редактора, демонстрирующий только панель инструментов и вкладки Scene и Game
На левой стороне панели инструментов расположены кнопки навигации и преобразования объектов. Они позволяют рассматривать сцену с разных сторон и перемещать объекты. Предлагаю вам попрактиковаться в их применении, так как просмотр сцен и перемещение объектов — это два основных действия, выполняемых в визуальном редакторе Unity (они настолько важны, что я посвятил им отдельный раздел). Правую сторону панели инструментов занимают раскрывающиеся меню с перечнем компоновок и слоев. Как я уже упоминал, интерфейс Unity является гибкой, настраиваемой системой, поэтому и существует меню Layouts, позволяющее переходить от одного варианта компоновки к другому. Меню Layers относится к расширенным функциональным возможностям, которые мы пока рассматривать не будем (о слоях речь пойдет в следующих главах).
1.2.2. Работа с мышью и клавиатурой
Навигация в сцене осуществляется в основном с помощью мыши и набора клавишмодификаторов, влияющих на результат манипуляций мышью. Тремя главными операциями являются перемещение (move), облет (orbit) и масштабирование (zoom). Действия с мышью для совершения каждой из этих операций описаны в приложении А в конце книги, так как они зависят от типа мыши. Но в основном они сводятся к щелчкам и перетаскиванию при нажатых и удерживаемых клавишах Alt (или Option на компьютерах Mac) и Ctrl. Потратьте некоторое время на манипуляции объектами сцены, чтобы понять, как выполняются перемещение, облет и масштабирование.
30 Глава 1. Знакомство с Unity
СОВЕТ Хотя в Unity вполне можно работать с двухкнопочной мышью, рекомендую вам приобрести мышь с тремя кнопками (не сомневайтесь, в Mac OS X она тоже работает).
Преобразование объектов также осуществляется посредством этих трех операций. Более того, каждому типу навигации соответствует собственное преобразование: перенос (translate), поворот (rotate) и изменение размеров (scale). Рисунок 1.11 демонстрирует эти преобразования на примере куба.
П |
П |
И а а |
Рис. 1.11. Применение трех вариантов преобразования: переноса, поворота и изменения размеров (более светлые линии обозначают исходное состояние объекта)
После выделения объекта сцены появляется возможность двигать его (или, если брать более точный термин, переносить), вращать и указывать его размер. Если посмотреть с этой точки зрения на процесс навигации в сцене, то перемещение означает перенос камеры, облет соответствует повороту камеры, а масштабирование — изменению размеров камеры. Переход между этими операциями осуществляется не только кнопками панели инструментов, но и нажатием клавиш W, E и R. При входе в режим преобразования у выделенного объекта появляются цветные стрелки или окружности. Это габаритный контейнер преобразования (transform gizmo), перетаскиванием которого вы меняете вид объекта.
Рядом с кнопками преобразований находится еще одна кнопка. Это кнопка инструмента Rect, позволяющего перейти к работе с двухмерной графикой и объединяющего в себе операции переноса, поворота и изменения размеров. В трехмерном пространстве за каждую из этих операций отвечает свой инструмент, но в двухмерном пространстве они объединены, так как у нас становится меньше на одно измерение. В Unity существует также набор клавиатурных комбинаций для ускорения выполнения различных операций. О них вы можете узнать в приложении A. Рассмотрим остальные фрагменты интерфейса.
1.2.3. Вкладка Hierarchy и панель Inspector
На левой стороне экрана примостилась вкладка Hierarchy, в то время как правую заняла панель Inspector (рис. 1.12). Вкладка Hierarchy содержит список всех присутствующих в сцене объектов в виде древовидной структуры, ветви которой вложены друг в друга в соответствии с иерархическими связями между объектами. По сути, эта вкладка предлагает вам возможность выделения объектов по именам, избавляя от необходимости искать нужный объект в сцене, чтобы выделить его щелчком. Иерархические связи объединяют объекты друг с другом. Визуально это оформлено в виде папок, при этом вы можете перемещать одновременно целые группы объектов.