Наверняка многим кажется достаточно сложным процесс создания и введения в проект анимированной модели персонажа. В этой статье мы хотим затронуть тему импорта 3D модели персонажа в Unity3D, его подготовку, импорт анимаций, настройку аниматора и простейший контроллер, который будет управлять движениями и анимацией персонажа.
Для начала возьмем Free – ассет с персонажем на Asset Store Unity. https://assetstore.unity.com/packages/3d/characters/humanoids/man-in-a-suit-51662
Загружаем его:
И импортируем в проект:
Открываем в окне Project папку с персонажем, находим его модель, переносим в сцену.
Поскольку это модель из магазина AssetStore, она полностью настроена и готова к введению в игру. Тем не менее, важно убедиться, что всё настроено верно:
- Во вкладке Rig должен быть выбран AnimationType: Humanoid
2. Во вкладке Animation у данной модели нет собственных анимационных клипов. Именно поэтому мы возьмем их с сайта mixamo.com:
Эти анимации можно свободно скачать, что мы и сделаем сейчас.
Humanoid – анимации легко можно использовать на любых Humanoid – персонажах. Поэтому не важно, создадите ли Вы свою анимацию или скачаете готовую – любой из вариантов будет работать с Humanoid – персонажем.
Я подготовил вот такой сет анимаций. Он включает в себя:
- Holding Idle – анимация “стоим на месте”
- Walking – “Идем вперед”
- Walking Backward – “Идем назад”
- Walk Right и Walk Left – “Идем влево/вправо”
- Running, Left Run, Right Run – “Бег вперед, влево, вправо”.
Обязательно выберите все файлы с анимациями и во вкладке Rig переключите их в режим Humanoid:
Пора настроить импорт каждой анимации в проект. Выделяем,например, walking и переходим во вкладку Animation:
1.Назначаем ключи старта и окончания анимации (поскольку каждый файл анимации идет отдельным файлом, обычно эти ключи автоматически стоят верно).
- Присваиваем имя анимации, можно назвать так же, как мы назвали файлы.
3.Устанавливаем галочку LoopTime- этот включенный параметр зацикливает анимацию при воспроизведении.
Аналогичным образом настраиваем остальные анимации. Не забываем нажимать Apply для того чтобы применить все изменения анимационного клипа.
Теперь в сцене выделим персонажа. Давайте посмотрим на компонент Animator, который присутствует на нем. Нам важны два поля:
- Avatar – определяет, как именно будут связаны кости модели с костями в анимации. При импорте модели персонажа, движок автоматически создает аватар. Но если что-то идет не по плану, аватар можно сконфигурировать вручную. Для этого нужно выбрать модель персонажа в окне проекта, и во вкладке Rig перейти в Configure.
Если Вы всё делаете, как и я – проблем с аватаром возникнуть не должно.
2. Controller – Это то, с чем мы и будем работать дальше. Анимационный контроллер – это своего рода схема, в которой мы определим, как именно воспроизводятся анимации, в каком состоянии какие из анимаций смешиваются друг с другом. Если сказать проще, то именно в контроллер мы будем отправлять сигнал о том, какая анимация должна воспроизводиться в данный момент. Но обо всём по порядку.
Давайте создадим анимационный контроллер: Правой кнопкой мыши кликаем в окне проекта. Create – Animator Controller.
Получится вот такой файл, я назвал его PersonAnimatorController:
Кликаем по нему дважды, откроется вкладка Animator:
Это и есть окно, в котором мы установим алгоритм работы наших анимаций. Давайте сразу создадим 3 состояния (ПКМ – Create State – Empty):
- Idle
- Walk
- Run
Выделив одно из состояний (например, idle), в окне Inspector мы можем заметить, что поле Motion сейчас пустое. Сюда необходимо поместить анимационный клип (тот, которому мы настраивали ключи Start-End, устанавливали Loop pose, и т.д.).
Поэтому, не снимая выделение с выделенного элемента, в окне Project находим файл с анимацией Idle, и из него перетаскиваем АНИМАЦИОННЫЙ КЛИП в поле Motion в окне инспектора.
Таким же образом устанавливаем клипы в остальные состояния (walk, run).
Теперь в левой части окна Animator переходим во вкладку Parameters:
Создаем Int – параметр, назовем его “state”. Это переменная, которая будет определять, в каком состоянии сейчас находится аниматор персонажа (какое из наших трёх состояний воспроизводится в данный момент). Этим параметром в будущем мы будем управлять из скрипта.
Теперь необходимо создать переходы между состояниями.
Кликаем на Idle правой кнопкой, жмем на Make Transition, после чего наводим курсор на состояние Walk.
Сразу сделаем переходы между всеми состояниями, и туда, и обратно.
Теперь переходим к настройке каждого перехода. Первый переход:
Idle – Walk:
Выделяем его, смотрим в правую часть окна Animator:
Has Exit Time – снимаем галочку. Этот параметр, при включенном состоянии, сначала ждет, пока текущая анимация отыграет полностью, а уже после – совершает переход в другое состояние. Нам это не нужно, т.к. переходы у нас будут в конкретные моменты, когда наша переменная state меняет своё значение.
В Conditions добавляем условие перехода:
Дословно это выглядит так: “Если state = 0”. Если представить это в виде кода:
if(state == 1){ совершаем переход }
То есть, выбранный переход сработает в том случае, когда значение state будет равно “1”.
Обратный переход из Walk в Idle настраиваем так (не забываем во всех переходах отключать Has Exit Time):
По аналогии, нужно сделать переходы:
Idle – Run (state equals 2)
Run – Idle (state equals 0)
Walk – run (state equals 2)
Run – Walk (state equals 1)
Не забудьте выделить персонажа в сцене и переместить созданный анимационный контроллер в поле Controller в компоненте Animator:
Теперь, если запустить игру и, выделив персонажа, в окне аниматора поменять значение state, мы увидим, что анимации воспроизводятся:
Вы можете заметить, что персонаж немного смещается и разворачивается. Это происходит, потому что мы не настроили смещение и поворот за счёт анимации. Делается это в окне импорта каждого файла анимации, во вкладке Animation. Обычно я настраиваю анимации так, чтобы они никак не влияли на перемещение или поворот. Установите флажок во всех опциях Bake Into Pose.
А так же Based Upon в Original.
Вот так:
Теперь создадим скрипт, чтобы управлять анимациями персонажа по нажатию на клавиши.
Называем его PersonController. Перетяните скрипт на персонажа, чтобы он отобразился в списке компонентов под компонентом Animator:
Открываем скрипт. Пишем код:
Теперь, если запустить игру, персонаж начнет реагировать на нажатия на клавиши.
На этом пока всё. Это базовый механизм настройки персонажа, аниматора, и простой способ воспроизвести анимации. На основе этого принципа можно анимировать многие игровые объекты, не только персонажей. Но для того, чтобы сделать качественное смешивание анимаций и не превратить Анимационный контроллер в мешанину из огромной кучи состояний и переменных, которыми сложно управлять, когда их много – существуют очень удобные инструменты смешивания в Animator (BlendTree), а так же возможность создать машину состояний внутри одного состояния. Но об мы расскажем в отдельной статье.
Огромное спасибо. Статья топ
у меня не запускается пишет all compilar error have to be fixed before you can enter playmode включалась до запуска playercontroler skript skript: public class PersonController : MonoBehaviour { public Animator animator; private int_state; private void start() { animator = GetComponent(); } private void Update() { if (Input.GetKey(KeyCode.W)) { if (Input.GetKey(KeyCode.LeftShift)) { _State = 2; } else { _State = 1; } } else { _State = 0; } animator.SetIntriger(“State”, _State); } }
Смотрите ответ на вкладке Помощь: http://prntscr.com/yd5fi9
А нде найти следуюшүю статью?
В данный момент нет продолжения.
А будет?
Задайте пожалуйста Ваш вопрос на почту в поддержку сайта support@unity3dschool.com