- •Предисловие
- •Введение
- •Благодарности
- •О книге
- •Перспективы
- •Условные обозначения, требования и доступные для скачивания данные
- •Автор в Интернете
- •Об авторе
- •Глава 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. Назначение материала
12.3.Сборки для мобильных устройств: iOS и Android 307
12.3.Сборки для мобильных устройств: iOS и Android
Мобильные устройства являются еще одной важной целевой платформой. По моим впечатлениям (впрочем, научно не подтвержденным), больше всего коммерческих игр в Unity создается именно в виде приложений для мобильных устройств.
ОПРЕДЕЛЕНИЕ Мобильным называется портативное устройство, которое пользователи носят с собой. Изначально этим термином называли смартфоны, но потом в эту группу попали еще и планшеты. Двумя наиболее распространенными компьютерными платформами для таких устройств являются iOS (от Apple) и Android (от Google).
Настройка процесса сборки для мобильных устройств сложнее, чем для настольных компьютеров и Интернета, поэтому данный раздел относится к необязательным — можете прочитать его с ознакомительными целями, не выполняя упражнений; упражнения могут делать только те читатели, кто приобрел лицензию разработчика для iOS и установил инструменты разработчика для Android.
ВНИМАНИЕ Мобильные устройства настолько часто обновляются, что на момент чтения данной книги процесс сборки может отличаться от описываемого. Высокоуровневые концепции, скорее всего, останутся теми же, но точное описание последовательности выполняемых команд и нажимаемых кнопок вам придется искать в выложенной в Интернете документации. Вот ссылки на страницы с документацией от Apple и Google соответственно: https://developer.apple.com/library/ios/documentation/ IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html, http://developer.android. com/tools/building/index.html.
СЕНСОРНЫЙ ВВОД
Ввод информации в случае мобильных устройств совсем не такой, как при работе с настольным компьютером или в Интернете. Он осуществляется посредством прикосновений к экрану, а не с помощью мыши и клавиатуры. Соответственно, в Unity поддерживается функциональность обработки касаний, в том числе такой код, как Input.touchCount и Input.GetTouch().
Эти команды используются при написании привязанного к платформе кода на мобильных устройствах. Но такой способ обработки ввода неудобен, поэтому существует ряд упрощающих ввод фреймворков. Лично я использую FingerGestures (http://fingergestures.fatalfrog.com/).
Теперь, после всех этих оговорок, можно перейти к объяснению общего процесса сборки для iOS и Android. Еще раз напоминаю, что эти платформы время от времени меняют детали этого процесса.
12.3.1. Настройка инструментов сборки
Мобильные устройства существуют отдельно от компьютера, на котором разрабатывается игра, и именно этот факт несколько осложняет процесс генерации и развертывания приложений. Вам потребуется настроить множество специализированных устройств, и только потом вы получите возможность щелкнуть на кнопке Build.
Настройка инструментов сборки для ios
На высоком уровне процесс развертывания созданной в Unity игры на платформе iOS требует построения Xcode-проекта, а затем его превращения в IPA (iOS App
308 Глава 12. Развертывание игр на устройствах игроков
Package — пакет приложения для iOS). Создать IPA сразу Unity не может, так как все iOS-приложения должны проходить через инструменты сборки от Apple. Это означает, что вам нужно установить Xcode (программную интегрированную среду разработки от Apple), включая iOS SDK.
ВНИМАНИЕ Все это означает, что вы должны работать на компьютере Mac, так как Xcode запускается только в OS X. Разработка игры может выполняться на компьютере с Windows или Mac, а вот сборка iOS-приложения возможна только на машинах Mac.
Скачайте Xcode с сайта Apple со страницы https://developer.apple.com/xcode/downloads/.
ПРИМЕЧАНИЕ Для продажи вашей игры для iOS в App Store вам потребуется членство в программе Apple-разработчиков. Его стоимость составляет 99 долларов в год; подписка осуществляется на странице https://developer.apple.com/programs/.
После установки Xcode вернитесь в Unity и переключитесь на платформу iOS. Вам потребуется скорректировать настройки проигрывателя для iOS-приложения (напоминаю, что для доступа к ним нужно открыть окно Build Settings и щелкнуть на кнопке Player Settings). В настройках проигрывателя вы должны сразу попасть на вкладку iOS, но если это не так, перейдите на нее, щелкнув на значке iPhone. Найдите внизу раздел Other Settings, а в нем — параметр Identification. Нужно скорректировать строку Bundle Identifier, чтобы Apple-устройство смогло правильно идентифицировать приложение.
ПРИМЕЧАНИЕ Параметр Bundle Identifier для iOS и Android применяется одним и тем же способом, соответственно, он важен для обеих платформ. Идентификатор в данном случае должен составляться по правилам, применимым для любого другого пакета кода: буквами нижнего регистра в форме com.названиекомпании.названиепродукта.
Другим важным параметром, существующим как для iOS, так и для Android, является Bundle Version (то есть номер версии приложения). Но его форма в большинстве случаев зависит от платформы; к примеру, недавно в iOS был добавлен короткий номер версии, который видим игрокам и отделен от основной версии пакета. Есть еще параметр Scripting Backend, которому раньше по умолчанию присваивался вариант Mono, но новая технология IL2CPP поддерживает обновления платформ, например 64-битные двоичные файлы.
Теперь щелкните на кнопке Build. Выберите место для нового файла сборки, и там появится сгенерированный Xcode-проект. Он допускает прямое редактирование (некоторые простые модификации могут быть частью сценария пост-сборки). В любом случае, откройте этот проект; в папке со сборкой находится множество файлов, вам же нужно дважды щелкнуть на файле с расширением .xcodeproj (он помечен значком с изображением чертежа). Интегрированная среда разработки Xcode загрузит это приложение; большая часть настройки данного проекта уже выполнена в Unity, вам же остается настроить профиль, который будет использоваться в дальнейшем.
12.3. Сборки для мобильных устройств: iOS и Android 309
ПРОФИЛИ IOS
Из всех аспектов разработки iOS самым необычным и часто меняющимся являются профили (provisioning profiles). Коротко говоря, это файлы, используемые для идентификации иавторизации. Apple строго контролирует, какие приложения могут запускаться на каждом устройстве; отправленные в Apple на утверждение приложения пользуются специальными профилями, позволяющими добавлять их в App Store, в то время как находящиеся на стадии разработки приложения имеют профили, связанные с зарегистрированными устройствами.
Щ а
а ,
а
Место управления профилями в центре разработчиков iOS
Вам нужно добавить UDID своего устройства iPhone (это связанный с вашим устройством идентификатор) и ID приложения (это параметр Bundle Identifier в Unity) на панель управления, расположенную на сайте Apple для разработчиков iOS. Полностью этот процесс объясняется на странице https://developer.apple.com/devcenter/ios/index.action.
Выберите свое приложение в списке проектов с левой стороны интегрированной среды Xcode-разработки. Появятся несколько относящихся к этому проекту вкладок; на вкладке Build Settings найдите раздел Code Signing, чтобы настроить профили, как показано на рис. 12.3. Заодно убедитесь, что параметр Scheme Destination на верхней панели окна не указывает на симулятор, а имеет значение iOS Device (в противном случае часть настроек окажется недоступной).
В |
З а а а а Scheme Destination |
|
а • • • • а iOS Device |
За•а -• • €
Сƒ „ , • • а а а Debug identity а • - а iOS Developer,
а • • а а а Release identity — - а iOS Distribution
Рис. 12.3. Настройка профилей в интегрированной среде Xcode-разработки
После настройки профилей можно приступать к созданию приложения. Выберите в меню Product команду Run или Archive. Это меню содержит множество команд, в том числе имеющую соблазнительный вид команду Build, но для наших целей требуется
310 Глава 12. Развертывание игр на устройствах игроков
только упомянутая команда Run или Archive. Команда Build генерирует исполняемые файлы, но не собирает их в пакет для iOS, в то время как
команда Run тестирует приложение на устройстве iPhone, связанном с компьютером при помощи USB-кабеля;
команда Archive создает прикладной пакет, который можно пересылать на другие зарегистрированные устройства (у Apple это называется «специальной сборкой»).
Команда Archive создает не готовый прикладной пакет, а, скорее, комплект в промежуточном состоянии между необработанными файлами кода и IPA-файлом. Готовый архив появляется в окне Organizer интегрированной среды Xcode-разработки; чтобы получить из такого архива IPA-файл, щелкните на кнопке Distribute, как показано на рис. 12.4. После этого вам нужно будет указать, каким образом следует распространять приложение — через магазин или в виде специальной сборки.
В а а • , • •
а • Distribute
О
а Archives
а Organizer
С а‚а •ƒ„ „а… а/ „а а„ „ ‡
Рис. 12.4. Распространение архивированных приложений iOS через окно Organizer
Выбрав распространение в виде специальной сборки, вы получите IPA-файл, который можно будет отправить тестерам. Можно сделать это напрямую, передав им файл для установки через iTunes, но удобнее воспользоваться сервисом TestFlight (https://developer.apple.com/testflight/).
Настройка инструментов сборки для Android
В отличие от приложений iOS, файлы формата APK (Android Application Packge) Unity может генерировать напрямую. Для этого нужно добавить в Unity путь к Android SDK, включающий в себя нужный компилятор. Скачайте Android SDK с сайта Android и укажите путь к этому файлу в окне Unity Preferences, как показано на рис. 12.5. Скачать SDK можно здесь: http://developer.android.com/sdk/index.html.
После этого нужно задать параметр Bundle Identifier, как вы уже делали для iOS. Эта операция осуществляется в настройках проигрывателя на панели Inspector: укажите идентификатор в виде com.названиекомпании.названиепродукта (как объяснялось выше). Затем щелкните на кнопке Build, чтобы запустить процесс сборки. Как и в случае с другими сборками, вас первым делом попросят указать, где вы хотите сохранить файл. В указанном месте будет создан APK-файл.
Полученный пакет приложения следует установить на устройство. Получить APKфайл на телефон Android можно, скачав его из Интернета или посредством USBподключения устройства к компьютеру (так называемый режим sideload). Конкрет-