Импорт анимированных ассетов в Unity. #7

Unity    2018-02-07 20:53:55     тег: Курс по Unity

В этом уроке речь пойдет о том, как экспортировать анимированные ассеты в среду разработки Unity. В программе для работы с 3D объектами - Maya, у меня есть анимированный персонаж. Он имеет такие анимации как: ходьба, бег, состояние покоя и прыжок. Экспорт анимированного персонажа в Unity делится на два этапа, сначала экспортируется сам персонаж, а затем анимация. Таким образом, персонаж и его анимация обычно представляют собой два разных файла. Сейчас я открою файл и покажу вам, как отделить модель от анимации. Но для начала я переключусь режим рендеринга на Viewport 2.0.

На данный момент у меня есть персонаж, который имеет полигональную модель, кости, и управление привязкой костей к модели, в английском это звучит как (control rig).

При экспорте анимированного объекта,  нам нужны его кости и модель.

Поэтому сделаем следующее, откроем меню Show выберем пункт None, снова откроем меню Show и выберем показ полигонов и джоинтов, то есть костей.

Также отключим управляющий слой, так как в Unity он не используется.

Теперь нам нужно все это выделить, поэтому зажмем клавишу Shift и выделим все мышкой.

Однако, наша модель не выделилась, так как нет активного слоя, на котором я смог бы ее выбрать.

Чтобы это исправить, отключим режим Reference, и снова выделим модель.

Справа, вы можете видеть все изменения трансформаций, которые были применены к объекту.
Как вы видите практически все значения равны нулю кроме масштаба, он равен одному единице, так как объект сейчас в оригинальном размере.

Данный файл анимации был настроен на использование метрической системы, поэтому мы можем спокойно экспортировать его в Unity.

Давайте откроем меню File, и выберем пункт Game Exporter, таким образом мы сможем экспортировать модель в FBX формате. Это похоже на экспорт из 3ds max, но с небольшими отличиями.

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

Убедитесь, что у вас выбраны опции Smoothing Groups и Tangents & Binormals. А также, поскольку персонаж имеет кости, нужно убедиться, что установлены опции Skinning и Blendshapes.

В разделе настройки, выберем Export to Single File. Остальное оставим все как есть. Также посмотрите, чтобы опция Up Axis была установлена в Y.

В Maya, ось Y направлена вверх как и в Unity, поэтому нам не нужно беспокоиться об изменении пивота объекта.

Также установим опцию Embed Media, так как к материалу объекта применяются текстуры, и нам нужно чтобы они, также перенеслись в Unity.

Все что осталось сделать, это указать путь для экспорта файла. Для этого щелкните по иконке папки и выберите папку нашего проекта Unity Fundamentals, затем папку Assets, и затем папку Meshes, но не заходите в нее и именно выберите.

Напишем название файла Dwarf_Hero и нажмем кнопку Export, после чего Maya экспортирует файл в наш проект на Unity.

В итоге появится сообщение, что файл успешно экспортирован и мы можем перейти в среду разработки Unity чтобы это проверить.

В Unity вы увидите, что в проект импортируется файлы текстур и материалов.

Затем появится окно с сообщением о обновлении карт нормалей. В котором сообщается, что некоторые текстуры не отмечены как карты нормалей, но Unity обнаружил, что они являются таковыми.

В данном случае, все что нужно сделать, это просто нажать кнопку Fix.

Давайте теперь добавим персонажа на сцену, и убедимся, что он правильно был импортирован.

Как вы видите при импорте персонажа, также импортировалось освещение, которое было в этом файле.

В данный момент оно нам не нужно, поэтому уберем его из параметров импорта.

В предыдущем уроке я рассказывал как убрать освещение и камеры у объекта.

Поэтому давайте выберем Dwarf_Hero и перейдем к разделу Model, в котором отключим опции Import Visibility, Import Cameras и Import Lights.

Также нужно убедиться, что Tangents & Binormals настроены на Import и Calculate Tangent Space.

Также должна быть установлена опция Import Materials. Чтобы применились изменения нажмем кнопку Apply.

Теперь освещение на объекте исчезло, и оно больше не импортируется.

Следующая вкладка которая нас интересует в настройках импорта ассета - это вкладка Rig.

Первое, что нам нужно определить - это какой тип анимации мы будем использовать.

Открыв выпадающий список Animation Type мы увидим четыре разных типа анимации, первый - это None, он подходит для моделей, которые не имеют рига.

Второй Legacy, является стандартным для использования в Unity 2017.

Третий тип Generic, тут анимация будет импортирована как есть без каких либо изменений.

А также существует четвертый, очень мощный тип, называемый Humanoid, который позволяет управлять костями персонажа.

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

Установив тип анимации как Humanoid, и создав одиночный клип анимации, допустим, состояния покоя, мы сможем применить ее одновременно всем персонажам этой толпы.

Но в нашем случае, мы будем использовать тип анимации Generic, так как наша модель имеет собственную самодостаточную анимацию, которая была создана в Maya.

Выбрав тип анимации Generic, появится опция Avatar Definition.

В этой опции необходимо указать аватара, который будет применен к ней по умолчанию.

В нашем случаем мы экспортировали из Maya и модель и аватар, поэтому будем использовать опцию Create From This Model, что означает создать из текущей модели.

Опция Root node позволяет использовать скорость анимации заданную в Maya, или мы можем определить собственную скорость в Unity.

Установим опцию Root node в None, для того чтобы самостоятельно настраивать скорость анимации персонажа.

Опцию Optimize Game Object стоит включать при создании финальной сборки приложения, а пока мы ее отключим и нажмем кнопку Aplly для применения изменений.

В данный момент наша модель не анимирована, поэтому начнем процесс экспорта самой анимации.

Для этого перейдем в Maya и откроем файл Locomotion.

Итак, в этом файле у меня есть персонаж, его модель, кости и элементы управления.

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

Но я вам покажу всю анимацию, так как данная модель персонажа имеется четыре анимационных клипа.

Кроме этого, мы отобразим кости персонажа, для чего откроем меню Show и выберем Joints, затем снова откроем меню Show и отключим Locators.

В итоге у объекта остануться включены только кости и модель.

Следующее, что стоит сделать, это выделить весь объект, вместе с костями.

Для выделения модели отключим ее блокировку, а затем зажмем клавишу Shift и щелкнем по ней.

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

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

Откроем меню Edit, Keys, и выберем Bake Simulation. Запекание создаст ключевой кадр в каждом кадре анимации.

Если вы снова проиграете анимацию вы увидите, что в принципе ничего не изменилось, кроме того, что шкала окрасилась в красный цвет.

Когда вы экспортируете анимацию, опция Bake Animation включена по умолчанию, но будет лучше, если вы будете запекать анимацию до экспорта.

Если мы откроем меню File - Game Exporter, в разделе Animation Clips мы увидим настроенные анимационные клипы. Это было сделано с помощью аниматора, который автоматически создал четыре клипа.

Первый клип - это ходьба, аниматор также самостоятельно настроил начальный и конечный кадр.

Нажав кнопку плей, мы можем предварительно просмотреть эту анимацию.

Вторая анимация - это бег, который находится с 40 по 56 кадр.

Третьим и четвертым клипом является состояние покоя и прыжок.

Теперь, когда эти клипы настроены, их можно экспортировать.

Также я отключу опцию Embed Media, так как мне не нужно, чтобы материалы импортировались в сцену.

Теперь укажем путь, для экспорта анимации, для чего в папке Accets создадим папку, которую назовем Animations.

Обратите внимание, что при экспорте вы не должны находится в папке Animations, вам нужно выйти из нее, а затем просто ее указать.

Над кнопкой экспорта вы можете увидеть, как будет назван анимационный клип.

Итак, нажмем кнопку Export, и Maya начнет экспортировать анимацию в проект Unity.

Давайте перейдем в Unity и откроем папку Animations. Теперь, когда анимация была импортирована в Unity, нужно убедиться, что она работает правильно.

Для этого выделим всё анимационные клипы удерживая клавишу Ctrl.

Перейдем в раздел Model, и убедимся, что все нужные опции включены, а также отключим опции Import Visibility, Import Cameras, Import Lights и Import Materials.

Нажмем Apply, и немного подождем пока Unity заново импортирует эти файлы.

Теперь когда импортировался риг для определения нашего аватара, нам нужно использовать тип анимации Generic.

Затем нужно определить аватар, указав опцию Copy From Other Avatar.

Так как аватар был создан из рига автоматически, мы можем выбрать его из поля Source.

Среди появившегося списка аватаров нас интересует Dwarf_HeroAvatar.

Кроме него вы также можете видить еще четыре экземпляра аватара, которые были созданы после импорта анимации.

Давайте выберем Dwarf_HeroAvatar и нажмем кнопку Apply. В итоге все четыре аватара из списка будут удалены.

Если развернуть один из анимационных клипов, то можно увидеть следующий список: клип анимации, меш, освещение которые мы убрали, а также общий меш персонажа.

Когда мы закончили с предварительными настройками, давайте перейдем на вкладку Animations, чтобы начать настройку анимации.

По умолчанию нужно, чтобы у всех клипов была установлена опция Import Animations. Все остальные опции оставляем по умолчанию.

Теперь нам нужно выбрать каждую анимацию отдельно, чтобы настроить ее начало и конец.

Но в нашем случае эту работу за нас сделал аниматор Maya. Единственное, что нам нужно сделать, это указать хотим ли мы зациклить анимацию.

В анимации покоя Idle, нам нужно установить опцию Loop Time, так как это циклическая анимация.

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

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