Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы и ответы к экзамену.docx
Скачиваний:
29
Добавлен:
21.06.2022
Размер:
16.83 Mб
Скачать

29. Игра в стиле jetpack joyride в Unity 2d. Анимация персонажа: покадровая анимация, создание анимационных переходов, добавление параметров перехода.

покадровая анимация

Кадры с анимацией бега находятся в спрайт-листе mouse_run, поэтому первым делом вам надо правильно их нарезать. Откройте папку Sprites в браузере проекта и найдите mouse_run. Выберите и установить его Sprite Mode в Multiple в Инспекторе. Затем нажмите на кнопку Sprite Editorчтобы открыть Редактор спрайта

В Редакторе спрайта нажмите на кнопку Slice в левом верхнем углу чтобы открыть варианты нарезки. Установите для поля Type (Тип) значение Grid (сетка). Установите размер сетки на 162 x 156 и нажмите на кнопку Slice. Теперь у нас есть сетка. Не забудьте нажать на кнопку Apply для сохранения изменений.

Закройте Редактор спрайта. Теперь, если вы развернете mouse_run в Браузере проекта, вы увидите, что он был нарезан на четыре разных спрайта.

Для работы с анимацией вам нужно будет открыть окно Анимация, если вы его еще не открыли. Выберите Window\Animation и откройте окно Animation (Анимация). Поместите его так, чтобы можно было видеть вкладки Animation и Project.

Во вкладке Анимация создайте два новых клипа: run и fly, выбрав [Create New Clip] в выпадающем меню, расположенном в верхнем левом углу (левее свойства Samples (Образцы)).

Выберите mouse в Иерархии. В Инспекторе вы увидите, что к нему автоматически добавлен компонент Animator.

Во вкладке Animation выберите анимацию run.

Во вкладке Project откройте папку Sprites и разверните раскадровку mouse_run.

Выберите все анимационные кадры: mouse_run_0, mouse_run_1, mouse_run_2, mouse_run_3 и перетаците их во временную диаграмму на вкладке Animation.

Анимация fly будет состоять только из одного кадра. Выберите анимацию fly во вкладке Анимация.

Во вкладке Project найдите спрайт mouse_fly и перетащите его во временную диаграмму, как вы это делали с run анимацией. Но на этот раз вам нужно добавить только один спрайт.

Убедитесь, что вы остановили после добавления кадров анимации режим записи (recoding mode) во вкладке Анимация, или вы можете случайно оживить позицию мыши или другие свойства. Нажмите на красную точку в панели управления вкладки Анимация, чтобы остановить запись.

создание анимационных переходов

В верхнем меню выберите Window\Animator, чтобы добавить вкладку Animator. В настоящее время у вас есть две анимации: run и fly. Анимация run выделена оранжевым цветом, который означает, что это анимация по умолчанию.

В настоящее время у нас нет перехода между анимациями run и fly. Это значит, что у мыши всегда анимация run. Чтобы исправить это, вам нужно добавить два перехода: от run к fly и обратно. Чтобы добавить переход от run, щелкните правой кнопкой мыши на ней и выберите пункт Сделать переход (Make Transition), а затем наведите курсор на анимация fly и щелкните на ней левой кнопкой мыши. Теперь добавьте переход от fly к run. Проиллюстрируем процесс создания обоих переходов в Unity (на тот случай, если что-то не понятно):

Это создает два безусловных перехода. Это значит, что при запуске игры, мышка сначала будет бежать, а после одного проигрыша этой анимации, она перейдет к летающему состоянию. Как только анимация полета завершится, мышка снова перейдет к бегу, и так далее. Это трудно заметить, потому что анимация fly занимает лишь доли секунды, так как состоит из одного кадра. Тем не менее, если вы переключитесь на Аниматор когда сцена запущена, вы увидите, что есть постоянный переход между анимациями.

добавление параметров перехода

Чтобы разорвать порочный круг необходимо добавить условие, чтобы знать когда анимация fly должна перейти к анимации run и наоборот. Откройте вкладку Аниматор и найдите панель Параметры (Parameters) в левом нижнем углу. Сейчас она пуста. Нажмите на кнопку +, чтобы добавить параметр, выбрав в выпадающем списке Bool.

Назовите новый параметр grounded.

Выберите переход от run к fly, чтобы открыть свойства перехода в Инспекторе. В секции Conditions измените единственное условие с Exit Time на grounded и установите его значение в false.

Сделайте то же самое с переходом от fly к run, но на этот раз установите значение grounded равным true. Таким образом мыш m будет летать, когда grounded равно false, и ходить, когда true.

30. Игра в стиле JETPACK JOYRIDE в Unity 2D. Добавление объекта для проверки приземления мыши. Использование слоев для определения приземления. Проверка приземления (скрипт), настройка этого скрипта. Включение и выключение пламени ракетного ранца (скрипт).

Добавление объекта для проверки приземления мыши

Есть много способов, чтобы проверить приземлился ли объект. Есть следующий метод, который дает визуальное представление о той точке, где отмечается земля, и это довольно полезно, когда у вас есть много подобных отметок (земля, потолок, и т.д.). Что делает данный метод наглядным, так это объект Empty добавленный как дочерний объект персонажа, как на картинке:

Создайте пустой игровой объект, а затем перетащите его на игровой объект mouse в Иерархии, чтобы добавить его в качестве дочернего объекта. Выберите этот объект в Иерархии и переименуйте его в groundCheck (Контроль заземления). Установите его Position в (0, -0.7, 0).

Чтобы сделать его более наглядным, нажмите на icon selection (Выбрать значок) в Инспекторе и выберите зеленый прямоугольник со скошенными краями (вы можете выбрать любой цвет).

Использование слоев для определения приземления

Прежде чем вы сможете убедиться, что мышь находится на земле, вам нужно определить, что является основанием. Если вы не сделаете этого, мышь будет ходить на вершине лазеров, монет и других игровых объектов с коллайдерами. Будем использовать класс LayerMask в сценарии, поэтому, необходимо сначала установить правильный слой с объектом пола.

Откройте папку Prefabs во вкладке Проекты (Project) и раскройте префаб room1. Выберите floor (пол) внутри Prefab.

В Инспекторе нажмите на выпадающий список Layer (слой) и выберите пункт Add Layer... (Добавить слой...).

Это откроет редактор Tags & Layers (Теги и Слои) в Инспекторе. Найти первый редактируемый элемент User Layer 8 и введите в него Ground. Все предыдущие слои зарезервированы в Unity.

Далее, выберите floor в папке Prefab и снова установите его Layer в Ground.

Проверка приземления мыши

Чтобы мышка автоматически переключалась между состояниями, вам надо будет обновить скрипт MouseController и проверить, находится ли мышка на земле, а затем сообщить об этом Aниматору (Animator).

Откройте скрипт MouseController и добавьте следующие переменные экземпляра:

Переменная groundCheckTransform хранит ссылку на groundCheck, который вы создали ранее.

Переменная grounded определяет на земле ли мышка.

Переменная groundCheckLayerMask хранит LayerMask, который определяет, что есть земля.

Переменные animator содержат ссылку на компонент Animator (Аниматор).

Лучше закешировать компоненты, получаемые с помощью GetComponent в какой-нибудь переменной, так как GetComponent медленно работает.

Для кеширования компонента Animator откройте следующую строку кода Start:

Теперь добавим метод UpdateGroundedStatus:

Этот метод проверяет приземлилась ли мышь и устанавливает параметр аниматора:

Чтобы проверить, на земле ли мышка, создает круг с радиусом 0.1 на позиции объекта groundCheck. Если этот круг перекрывает любой объект, который имеет слой, указанный в groundCheckLayerMask, то мышка на земле. Затем код устанавливает параметр grounded Аниматора, который затем запускает анимацию.

Наконец, добавьте вызов UpdateGroundedStatus в конце FixedUpdate:

Он вызовет метод со всеми исправленными обновлениями, гарантируя, что статус земли будет постоянно проверяется.

Настройка параметров скрипта MouseController для приземления

Остался один маленький шаг, чтобы заставить мышку автоматически переключаться между бегом и полетом. Откройте Unity и выберите игровой объект mouse в Иерархии. Найдите компонент скрипта Mouse Controller. Вы увидите два новых параметров скрипта:

Нажмите на выпадающий список Ground Check Layer Mask и выберите слой Ground. Перетащите groundCheck из Иерархии в свойство Ground Check Transform

Включение и выключение пламени ракетного ранца

Несмотря на то, что вы вылечили мышь от лени, вы не вылечили ее от расточительности, ибо ее ракетный ранец включен даже когда она находится на земле. Откройте скрипт MouseController и добавьте публичную переменную jetpack чтобы сохранить ссылку на систему частиц.

Затем добавьте следующий метод AdjustJetpack:

Этот метод отключает систему частиц, когда необходимо, а также уменьшает интенсивность выбросов частиц, когда мышь падает, так как реактивный ранец может быть по-прежнему работать, но не в полную силу.

Добавьте вызов этого метода в конце FixedUpdate:

Переменная jetpackActive имеет значение true, когда вы держите левую кнопку мыши и false, когда вы ее отпустили.

Теперь вернитесь в Unity и перетащите jetpackFlames из Иерархии в свойство jetpack скрипта MouseController.

Теперь реактивный ранец имеет три различных состояния. Он отключен, когда мышь приземлилась, работает в полную силу, когда мышь поднимается вверх, и едва дымит во время спуска. Это кажется довольно реалистичным, поскольку маловероятно, что вы выключите реактивный ранец, а потом устремитесь камнем вниз.