- •1. Преимущества, недостатки Unity. Примеры игр на основе Unity
- •Описание интерфейса главного окна Unity. Вкладка Scene, вкладка Game и панель инструментов.
- •Работа с мышью и клавиатурой. Навигация. Преобразование объектов. Вкладка Hierarchy, Project, Console и панель Inspector
- •4. Поддержка языков программирования в Unity. Сценарии. Компоненты. Методы Start() и Update(). Вывод информации в консоль.
- •5. Планирование трехмерного проекта fps. Трехмерное координатное пространство. Правая и левая системы координат.
- •6. Размещение объектов на трехмерной сцене. Понятие GameObject. Масштабирование объектов.
- •7. Источники света и камеры. Типы осветителей. Коллайдер, типы коллайдеров и точка наблюдения игрока в проекте fps.
- •3.3.3. Слежение за состоянием персонажа
- •14. Увеличение количества врагов: шаблон экземпляров, создание шаблона врага, сценарий SceneController, порождающий экземпляры врагов.
- •3.4.1. Что такое шаблон экземпляров?
- •3.4.2. Создание шаблона врага
- •3.5.1. Шаблон снаряда
- •3.5.2. Стрельба и столкновение с целью
- •3.5.3. Повреждение игрока
- •16. Типы игровых ресурсов. Создание геометрической модели сцены. Назначение геометрической модели. Наложение текстур. Выбор формата файла
- •4.1. Основные сведения о графических ресурсах
- •4.2. Создание геометрической модели сцены
- •4.2.1. Назначение геометрической модели
- •4.3. Наложение текстур
- •4.3.1. Выбор формата файла
- •17. Импорт файла изображения. Назначение текстуры. Создание неба с помощью текстур. Скайбокс. Создание нового материала для скайбокса
- •4.3.2. Импорт файла изображения
- •4.3.3. Назначение текстуры
- •4.4. Создание неба с помощью текстур
- •4.4.1. Что такое скайбокс?
- •4.4.2. Создание нового материала для скайбокса
- •18. Выбор формата файла для экспорта трехмерных моделей. Экспорт и импорт модели.
- •19. Системы частиц. Редактирование параметров эффекта. Новая текстура для пламени. Присоединение эффектов частиц к трехмерным объектам.
- •20. Подготовка проекта Memory. Понятие спрайт. Анимированные спрайты. Переключение камеры в режим 2d. Интерактивные объекты. Создание объекта из спрайтов.
- •21. Проект Memory: открытие карты по щелчку. Сценарий. Программная загрузка изображений. Выбор изображения в невидимом компоненте SceneController. Сценарий, реализующий эти методы.
- •28. Игра в стиле jetpack joyride в Unity 2d. Передвижение мыши вперед (скрипт). Создание бесконечного уровня в Unity: создание префаба, генератор комнат (скрипт).
- •29. Игра в стиле jetpack joyride в Unity 2d. Анимация персонажа: покадровая анимация, создание анимационных переходов, добавление параметров перехода.
- •31. Игра в стиле jetpack joyride в Unity 2d. Добавление лазеров в игру. Скрипт для включения, выключения, переключения и вращения лазеров. Настройка параметров этого скрипта.
- •32. Игра в стиле jetpack joyride в Unity 2d. Реализация скрипта, описывающего смерть мыши. Добавление анимаций Fall и Die, переходы между ними, триггер при смерти мыши.
- •33. Игра в стиле jetpack joyride в Unity 2d. Добавление монет. Использование тегов для различия в игре монет и лазеров. Обновленный скрипт контроллера персонажа.
- •Добавление метода для добавления нового объекта
- •Генерация и удаление объектов
- •Настройка параметров скрипта
- •35. Игра в стиле jetpack joyride в Unity 2d. Скрипт для добавления счётчика монет на экране. Скрипт для отображения кнопки на экране и возможности перезапуска игры.
- •Звук для лазера
- •Звук сбора монет
- •Звуки шагов и реактивного ранца
- •Добавление Audio Sources
- •Переключение между звуком шагов и реактивного ранца
- •Задание переменных сценария «Шаг» и «полет»
3.5.1. Шаблон снаряда
Если раньше мы стреляли без применения реальных снарядов, то теперь они нам понадобятся. Стрельба приемом испускания лучей, по сути, мгновенна, и попадание регистрируется в момент щелчка кнопкой мыши, враги же будут бросать «огненные шары», летающие по воздуху. Разумеется, хотя они двигаются довольно быстро, у игрока будет возможность уклониться. Фиксировать попадания мы будем не методом испускания лучей, а методом распознавания столкновений (это уже знакомый вам метод, не дающий игроку проходить сквозь стены).
Код будет порождать огненные шары тем же способом, которым порождаются враги, — созданием экземпляров из шаблона. Как вы знаете из предыдущего раздела, первым шагом в подобных случаях является создание объекта, который послужит основой для шаблона. Так как нам требуется огненный шар, выберите в меню GameObject команду 3D Object и в дополнительном меню команду Sphere. Присвойте появившейся сфере имя Fireball. Теперь создайте новый сценарий с таким же именем и присоедините его к объекту. Чуть позже мы напишем для него код, а пока оставьте вариант, предлагаемый по умолчанию, так как первым делом мы завершим работу над снарядом. Чтобы он напоминал огненный шар, ему нужно присвоить ярко-оранжевый цвет. Такие свойства поверхностей, как цвет, контролируются при помощи материалов.
ОПРЕДЕЛЕНИЕ Материалом (material) называется пакет информации, определяющий свойства поверхности любого трехмерного объекта, к которому этот пакет присоединен. К свойствам поверхности относятся цвет, блеск и даже небольшая шероховатость.
Выберите в меню Assets команду Create и в дополнительном меню команду Material. Присвойте новому материалу имя Flame. Выберите его на вкладке Project, чтобы увидеть его свойства на панели Inspector. Как показано на рис. 3.10, щелкните на цветовой ячейке с именем Albedo (это технический термин, означающий основной цвет поверхности). В отдельном окне откроется палитра цветов; переместите расположенный справа ползунок и точку в основной области таким образом, чтобы выбрать оранжевый цвет.
Еще мы увеличим яркость материала, чтобы придать ему большее сходство с пламенем. Отредактируйте параметр Emission (он тоже находится в списке атрибутов панели Inspector). По умолчанию он равен 0, присвойте ему значение 0.3, чтобы сделать материал более ярким.
Теперь можно превратить наш огненный шар в шаблон, перетащив его со вкладки Hierarchy на вкладку Project, как мы делали, создавая шаблон врага. Теперь у нас есть основа для наших снарядов! Осталось написать код стрельбы.
3.5.2. Стрельба и столкновение с целью
Отредактируем шаблон врага, наделив его способностью кидать огненные шары. Чтобы код распознавал игрока, потребуется новый сценарий (аналогично тому, как сценарий ReactiveTarget требовался для распознавания мишеней), поэтому создадим сценарий с именем PlayerCharacter и присоединим его к игроку.
А теперь откроем сценарий WanderingAI и введем в него код следующего листинга.
Думаю, вы заметили, что все примечания к этому листингу ссылаются на сходные (или аналогичные) фрагменты предыдущих сценариев. Фактически, в предыдущих листингах вы уже видели весь код, необходимый для бросания огненных шаров; мы просто смешали эти фрагменты друг с другом в соответствии с новым контекстом.
Как и в листинге SceneController, в верхнюю часть сценария нужно добавить два поля GameObject: сериализованную переменную, с которой будет связываться шаблон, и закрытую переменную для слежения за созданным кодом экземпляром этого шаблона. После испускания луча идет проверка попадания в объект PlayerCharacter; это работает аналогично тому, как код стрельбы проверял наличие у пораженного объекта компонента ReactiveTarget. Код, создающий экземпляр огненного шара при отсутствии таких шаров в сцене, работает как код создания экземпляров врага. Отличаются только размещение и ориентация объектов; на этот раз мы помещаем экземпляр, полученный из шаблона, перед врагом и нацеливаем в направлении его движения.
Как только новый код окажется на своем месте, на панели Inspector появится новое поле Fireball Prefab, точно так же, как в свое время для компонента SceneController появилось поле Enemy Prefab. Щелкните на шаблоне врага на вкладке Project, и на панели Inspector появятся компоненты этого объекта, как если бы вы выделили его в сцене.
Хотя упомянутое ранее неудобство интерфейса часто проявляется при редактировании шаблонов, именно интерфейс дает нам возможность легко редактировать компоненты объекта, чем мы сейчас и воспользуемся. Перетащите шаблон огненного шара со вкладки Project на поле Fireball Prefab панели Inspector, как показано на рис. 3.11.
Теперь, как только игрок окажется непосредственно перед врагом, в него полетит огненный шар… Попробуйте выполнить воспроизведение — перед врагом появится огненная сфера, но никуда не полетит, потому что мы пока не написали соответствующий сценарий. Давайте сделаем это сейчас. Код сценария Fireball приведен в следующем листинге.
Существенным новшеством в этом коде является метод OnTriggerEnter(). Он автоматически вызывается при столкновении объекта, например, со стеной или с игроком. Пока что наш код работает не совсем корректно; после его запуска огненный шар благодаря строке Translate() полетит вперед, но триггер не сработает, а вместо этого будет запрошен новый шар путем разрушения уже существующего. Требуется внести в компоненты огненного шара еще пару дополнений. Прежде всего, нужно превратить коллайдер в триггер. Для этого установите флажок Is Trigger в разделе Sphere Collider.
СОВЕТ После превращения в триггер компонент Collider продолжит реагировать на соприкосновение/перекрытие с другими объектами, но уже не будет препятствовать физическому пересечению с этими объектами.
Огненному шару также требуется компонент Rigidbody, относящийся к системе моделирования законов физики. Именно он позволит этой системе зарегистрировать триггеры столкновений для рассматриваемого объекта. Щелкните на кнопке Add Component на панели Inspector и по очереди выберите команды Physics и Rigidbody. После добавления указанного компонента сбросьте флажок Use Gravity, как показано на рис. 3.12, чтобы на огненный шар перестала действовать сила тяжести.
Воспроизведите сцену, и вы увидите, как огненные шары разрушаются после столкновения с каким-либо объектом. Так как код генерации этих шаров запускается сразу после исчезновения очередного экземпляра, обстрел игрока теперь становится непрерывным. Осталось добавить всего одну деталь: заставить игрока реагировать на попадание.