Как сделать непрерывную анимацию в unity

Добавил пользователь Alex
Обновлено: 04.10.2024

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

Каждая глава посвящена одной из областей анимации, от установки и событий до анимации персонажей и систем частиц. Unity является самодостаточным, интегрированным движком для разработки игр, который предоставляет готовые к применению функции для создания интерактивного 3D-контента. Этот игровой движок, соединенный с многофункциональной и сложной системой Mecanim является эффективным инструментом анимации.

Глава 1. Основные принципы анимации 15
Основные понятия анимации 15
Кадры 16
Ключевые кадры 17
Типы анимации 18
Анимация твердого тела 18
Оснащенная анимация, или анимация на основе скелета 19
Анимация спрайтами 20
Анимация, основанная на физике 21
Анимации превращения 22
Видеоанимация 23
Анимация частицами 25
Программная анимация 25
Анимация с помощью кода – придание предметам движения 27
Совместимая анимация – скорость, время и deltaTime 29
Движение в направлении 31
Программирование автогенерации с помощью анимационных кривых 34
Вращение объектов – анимация с помощью сопрограмм 38
Материалы и рельефная анимация 41
Дрожание камеры – анимационные эффекты 43
Основы анимации в Unity. Итоги 45

Глава 2. Анимация спрайтами 46
Спрайты, их импорт и настройка 47
Отдельные спрайты 47
Атлас спрайтов 50
Анимация с помощью спрайтов 54
Анимация спрайтами слишком медленная или слишком быстрая 56
Анимация должна быть цикличной 58
Кадры воспроизводятся в неправильном порядке 58
Основы анимации в Unity. Итоги 61

Глава 3. Встроенная анимация 63
Окно анимации – создание полета 63
Анимация нескольких объектов сразу 71
Вызовы функций из анимации 72
Системы частиц 75
Система частиц для имитации светлячков 77
Общие свойства системы частиц 79
Форма эмиттера и скорость эмиссии 80
Внешний вид частиц 82
Скорость частиц 83
Цвет частиц и их исчезновение 85
Основы анимации в Unity. Итоги 87

Глава 4. Анимация предметов с помощью системы Mecanim 89
Подготовка сцены с помощью прототипирования активов 89
Создание анимаций для кнопки и двери 90
Начало работы с системой Mecanim 95
Переходы и параметры системы Mecanim 98
Создание графа системы Mecanim для открывания двери 105
Создание интерактивных сцен 105
Основы анимации в Unity. Итоги 113

Глава 5. Основы анимации персонажей 114
Создание оснащенных персонажей 114
Импорт оснащенных персонажей 116
Аватары и ретаргейтинг 118
Ретаргейтинг анимации 124
Перемещение корневого объекта 130
Исправление смещения при движении 130
Основы анимации в Unity. Итоги 135

Глава 6. Продвинутая анимация персонажей 137
Создание управляемого персонажа 137
Смешивание деревьев 139
Размерности 142
Отображение десятичных чисел с дробной частью 146
Подготовка к написанию скрипта для смешивания деревьев анимаций 149
Написание скрипта для управления смешиванием деревьев системы
Mecanim 150
Тестирование смешивания деревьев системы Mecanim 152
Основы анимации в Unity. Итоги 152

Глава 7. Смешивание форм, инверсная кинематика и анимированные текстуры 154
Смешивание форм 154
Инверсная кинематика 157
Анимированные текстуры 168
Основы анимации в Unity. Итоги 173
Предметный указатель 175
Об авторе

Создал анимацию открытия верхней крышки сундука ChestOpen.anim. Надо чтобы при нажатии клавиши "E" запускалась анимация. Версия Unity 3D 5.5.1
Заранее спасибо за помощь!!

2 ответа 2

Короче после долгих мучений я нашел ответ! Анимация не запускалась из-за того что не стоит галочка Legacy
1 Выбираем нашу анимацию
2 Справа от надписи инспектор в выпадающем меню выбираем Debug
3 Ставим галочку напротив Legacy
4 Ставим обратно Normal вместо Debug
5 Готово! Наслаждаемся просмотром долгожданной анимации!

Код будет работать, если ты ещё самому сундуку добавишь объект анимации.

Я сам добавлял ещё в скрипт

и помещал туда сам клип от объекта. После этого вызываешь:

Сама анимация должна быть помещена в public AnimationClip ac1; А объект Animation anim - это анимация самого предмета, которая должна быть добавлена к нему в класс Animation

Все равно не работает. Заметил важный момент. Анимация которую я добавляю к anim убераеться при запуске игры. Пока игра запущена пытаюсь добавить ее но не получаеться. Я ее выбираю а она просто не добавлеться

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

Итак, начнем. Откроем Unity и создадим новый 2d проект

2dUnityProject

Далее создадим две папки с названием Sprite и Animation

Unity5Folder

Ptica2

Перенесли спрайт и теперь выделим его. Справа появится его свойства. В свойствах нам пока понадобится только одно свойство Sprite Mode. Установим режим Multiple, так как наше изображение имеет несколько элементов, и нажмем кнопку Apply.

SpriteMode

Далее, для того чтобы разделить наш спрайт на несколько элементов перейдем в редактор спрайта Sprite Editor в том же свойстве этого спрайта.

SpriteEditor

Перед нами откроется редактор, в котором мы просто выделяем наши 2 элемента по отдельности.

SpriteEditor1

SpriteEditor2

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

Вырезали элементы и далее просто закрываем редактор, на что он спросит вас сохранить изменения или нет.

Итак, наша птица готова, переходим к анимированию. Перенесем спрайт на сцену и Unity спросит у нас куда сохранить файл .anim, в котором будут хранится все последующие анимации данного объекта. Выберем папку Animation и сохраним туда этот файл.

Anim

WindowAnimation

В окне создания анимации выберем наш файл Ptica.anim и создадим новую анимацию Create a new Clip…

PticaAnim

Когда наша новая анимация будет выбрана, рядом в параметре Sample укажем количество кадров 2 , так как у нас всего 2 элемента Спрайта.

Затем перенесем наши 2 элемента в окно редактора анимации, нажмем кнопку записи и кнопку Play.

PticaAnimWiev

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

Перейдем в папку Animation и откроем файл Ptica.anim

AnimSpeed

Здесь вы увидите все те анимации, которые будут использовать наш объект. Для изменения скорости выделим анимацию, которая проигрывается первая по умолчанию (она будет оранжевым цветов) и справа в окне свойства анимации изменим параметр Speed на другое значение.


Это блог про аниме?

Intermedius — находящийся посередине. Думаю, что все, кто смотрел хотя бы одну серию аниме, замечали небольшую вставку в середине, которая обычно служит для перехода между сценами и рекламного блока (англ. - bumper, яп. - アイキャッチ aikyatchi). Картинка из заголовка статьи является таким переходом в одной из серий тайтла “New Game!!", про небольшую игровую студию. Ах да, раз это блог про Unity, то в данном посте мы рассмотрим оформление перехода между сценами именно в нём. =)

Сцены в Unity являются основной единицей деления игры на части и сам по себе переход между ними не является чем-то сложным. Переход реализуется через класс SceneManager, при помощи методов LoadScene() или LoadSceneAsync(), но без дополнительного оформления эти переходы будут резкими и это будет выглядеть странно. Попробуем сгладить этот переход, добавив проекту немного визуальной привлекательности.

Схема довольно проста: обе сцены, между которыми осуществляется переход, должны быть визуально идентичны на момент выгрузки предыдущей и загрузки следующей. Манипуляции для такого перехода обычно организуются через анимацию элементов сцены. Для примера в этом посте мы используем чёрный экран(элементом, отвечающим за данный эффект, будет картинка чёрного цвета). Выгружаемая сцена должна постепенно уйти в чёрный цвет, а следующая за ней плавно из него появиться.

Слово анимация как бы намекает нам на использование механизма в Unity под названием "Mecanim". Если вы не очень с ним знакомы, то можно прочитать(а ещё лучше использовать его в качестве упражнения) предыдущий пост "Шаблон Состояние", в котором, в целях тренировки, этот механизм использовался для создания машины состояний без анимации.

Задача

Оформить переход между тремя сценами через затемнение. Первая сцена появляется моментально и через 2 секунды переходит во вторую. Переходы между второй и третьей зациклены и осуществляется плавно по клику.

Подготовка

  1. Создадим три сцены:
    • BootScene - самая первая сцена, на которую попадает игра, покажем её сразу без затемнения
    • FirstScene и SecondScene - две сцены, переходы между которыми буду зациклены между друг другом
  2. Добавим сцены в Build Settings
  3. Создадим ещё один объект Canvas с именем SceneTransition . Выставим ему Render Mode - Screen Space - Camera и добавим Main Camera . Выставим Order in Layer равным 999 , чтобы он всегда был поверх всего остального
  4. Добавим к SceneTransition объект типа Image и назовём его Fade . Полностью чёрный, перекрывающий всю площадь экрана. Можно его отключить, чтобы он не загораживал экран

Анимация

  1. Создадим папку Animations
  2. Откроем панель Animation . Выделив элемент Fade нажмём кнопку Create и создадим анимацию FadeIn , также создадим анимацию FadeOut
  3. Настроим анимацию FadeIn . Выделяем ассет FadeIn . Убираем галочку Loop Time . Выделяем элемент Fade . В закладке Animation нажатием кнопки Enable/Disable keyframe recording mode включаем запись действий. Включаем компонент Image . Переходим в закладке Animation на отметку в 1 секунду. Выставляем в настройке цвета alpha = 0 . Выключаем компонент Image . В закладке Animation выключаем запись действий. Проверяем анимацию плавного появления UI из затемнения
  4. Настраиваем анимацию FadeOut , но в обратном порядке: включаем Image , альфа-канал от 0 до 100 . Этот пункт остаётся в качестве тренировки
  5. Настраиваем переход между анимациями. Во вкладке Animator добавляем триггер FadeOut . Добавляем переход между FadeIn и FadeOut . На переходе выключаем Has Exit Time , Transition duration выставляем в 0. В Conditions добавляем созданный триггер FadeOut
  6. Создадим скрипт TransitionHandler для переключения сцены после завершения анимации FadeOut

  1. Добавим созданный скрипт к объекту Fade . В конец анимации FadeOut добавим Event . Выберем функцию FadeOutFinished() из скрипта TransitionHandler

Настройка переходов

  1. Для BootScene создадим скрипт, который будет запускать переход на FirstScene через 2 секунды
  1. Настроим BootScene . Добавим префаб SceneTransition . Настроим камеру. Укажем следующую сцену - FirstScene . Отключим анимацию появления сцены
  2. Добавим на сцену пустой объект назовём его BootHandler и добавим соответствующий скрипт. Настроим для нового объекта animator
  3. После запуска BootScene должна иметь затемнение перед переключением
  4. Создадим скрипт ClickHandler для остальных сцен, который будет запускать переход по клику
  1. Настроим FirstScene . Добавим префаб SceneTransition . Настроим камеру. Укажем следующую сцену - SecondScene
  2. Добавим на сцену пустой объект назовём его ClickHandler и добавим соответствующий скрипт. Настроим для нового объекта animator
  3. Настроим SecondScene . Проделываем те же самые шаги, что и для FirstScene , только указываем следующей сцену - FirstScene
  4. Наслаждаемся результатом

Заключение

После всех наших манипуляций мы получили префаб, который можно использовать для настройки переходов между сценами. Навряд ли вы будете его использовать для продакшена, так как используемая синхронная загрузка сцен не очень красивое решение, а также необходима тонкая настройка условий перехода, необходимо продумать остановку игры, в момент начала анимации. Да и сами анимации желательно сделать более интересными, например, в Homescapes(Playrix) переход между загрузкой ресурсов и запуском меню скрыт за опускающейся вдоль стены дома камерой. Однако, после повторения данных шагов собственными руками, у вас должно сложиться представление, как сделать переходы красиво. Пока! =)

Наверняка многим кажется достаточно сложным процесс создания и введения в проект анимированной модели персонажа. В этой статье мы хотим затронуть тему импорта 3D модели персонажа в Unity3D, его подготовку, импорт анимаций, настройку аниматора и простейший контроллер, который будет управлять движениями и анимацией персонажа.


И импортируем в проект:


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


Поскольку это модель из магазина AssetStore, она полностью настроена и готова к введению в игру. Тем не менее, важно убедиться, что всё настроено верно:

  1. Во вкладке Rig должен быть выбран AnimationType: Humanoid



Эти анимации можно свободно скачать, что мы и сделаем сейчас.

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

Я подготовил вот такой сет анимаций. Он включает в себя:

  • Holding Idle – анимация “стоим на месте”
  • Walking – “Идем вперед”
  • Walking Backward – “Идем назад”
  • Walk Right и Walk Left – “Идем влево/вправо”
  • Running, Left Run, Right Run – “Бег вперед, влево, вправо”.


Обязательно выберите все файлы с анимациями и во вкладке Rig переключите их в режим Humanoid:


Пора настроить импорт каждой анимации в проект. Выделяем,например, walking и переходим во вкладку Animation:


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

  1. Присваиваем имя анимации, можно назвать так же, как мы назвали файлы.


3.Устанавливаем галочку LoopTime- этот включенный параметр зацикливает анимацию при воспроизведении.


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


Теперь в сцене выделим персонажа. Давайте посмотрим на компонент Animator, который присутствует на нем. Нам важны два поля:


  1. Avatar – определяет, как именно будут связаны кости модели с костями в анимации. При импорте модели персонажа, движок автоматически создает аватар. Но если что-то идет не по плану, аватар можно сконфигурировать вручную. Для этого нужно выбрать модель персонажа в окне проекта, и во вкладке Rig перейти в Configure.


Если Вы всё делаете, как и я – проблем с аватаром возникнуть не должно.

2. Controller – Это то, с чем мы и будем работать дальше. Анимационный контроллер – это своего рода схема, в которой мы определим, как именно воспроизводятся анимации, в каком состоянии какие из анимаций смешиваются друг с другом. Если сказать проще, то именно в контроллер мы будем отправлять сигнал о том, какая анимация должна воспроизводиться в данный момент. Но обо всём по порядку.

Давайте создадим анимационный контроллер: Правой кнопкой мыши кликаем в окне проекта. Create – Animator Controller.


Получится вот такой файл, я назвал его PersonAnimatorController:


Кликаем по нему дважды, откроется вкладка Animator:


Это и есть окно, в котором мы установим алгоритм работы наших анимаций. Давайте сразу создадим 3 состояния (ПКМ – Create State – Empty):



Выделив одно из состояний (например, idle), в окне Inspector мы можем заметить, что поле Motion сейчас пустое. Сюда необходимо поместить анимационный клип (тот, которому мы настраивали ключи Start-End, устанавливали Loop pose, и т.д.).

Поэтому, не снимая выделение с выделенного элемента, в окне Project находим файл с анимацией Idle, и из него перетаскиваем АНИМАЦИОННЫЙ КЛИП в поле Motion в окне инспектора.


Таким же образом устанавливаем клипы в остальные состояния (walk, run).

Теперь в левой части окна Animator переходим во вкладку Parameters:



Создаем Int – параметр, назовем его “state”. Это переменная, которая будет определять, в каком состоянии сейчас находится аниматор персонажа (какое из наших трёх состояний воспроизводится в данный момент). Этим параметром в будущем мы будем управлять из скрипта.


Теперь необходимо создать переходы между состояниями.

Кликаем на Idle правой кнопкой, жмем на Make Transition, после чего наводим курсор на состояние Walk.



Сразу сделаем переходы между всеми состояниями, и туда, и обратно.


Теперь переходим к настройке каждого перехода. Первый переход:


Выделяем его, смотрим в правую часть окна Animator:


Has Exit Time – снимаем галочку. Этот параметр, при включенном состоянии, сначала ждет, пока текущая анимация отыграет полностью, а уже после – совершает переход в другое состояние. Нам это не нужно, т.к. переходы у нас будут в конкретные моменты, когда наша переменная state меняет своё значение.

В Conditions добавляем условие перехода:


Дословно это выглядит так: “Если state = 0”. Если представить это в виде кода:

То есть, выбранный переход сработает в том случае, когда значение 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), а так же возможность создать машину состояний внутри одного состояния. Но об мы расскажем в отдельной статье.

Читайте также: