Tutorial: How to adjust animation speed in Unity without code
In this tutorial, we are going to share on how to adjust animation speed in Unity without code.
We are using Hell Creeper as an example in this tutorial.
Look for the animator file in the Controller folder and double click it. You should see something like the image below.

Click on the animation that you would like to change its speed. For eg, walk forward in place. See inspector after you clicked on the animation in animator.

By default, the speed is 1. For example, if you would like to slower the speed by half, change it to 0.5. If you would like to double the speed, change it to 2.
Done! It’s that easy! I hope this tutorial will save you some time. Thank you for reading.
Unity3D Ускорить отрисовку 2D анимации в разы? Легко
В этой статья мне хотелось бы рассказать о том, как была ускорена отрисовка монстров при создании игры Alien Massacre. Данное решение подойдет для любых проектов, которые испольуют спрайтовую анимацию.
В результате разработки мобильной игры оказалось, что достаточно узким местом стало проигрывание большого количества анимированных объектов на сцене. В результате сформировались следующие требования:
- 1 Необходимо обеспечить отрисовку большого числа анимированных объектов на сцене. Ведь мы хотим, чтобы игрок отстреливался от полчищ монстров.
- 2 Прогресс анимации должен быть различен для каждого из объектов. Ведь мы не хотим, чтобы мобы ходили строем.
Решение «из коробки»
Безусловно, первое решение было простым: все сделать с помощью уже встроенного в UnityEngine компонента Animator. Посмотрим, что из этого получается.
В качестве атласа с исходной анимацией будем использовать зломонстра с 24 кадрами спрайтовой анимации 64х64 пикселя каждый:

В Unity3D задаем тип текстуры sprite и в SpriteEditor нарезаем его на 24 куска. Делаем для него анимацию и закидываем все это на пустой объект. Тут самое время вспомнить о том, что у нас было условие про различный прогресс анимации для различных объектов. Не вопрос! Минута работы и скрипт готов.
Теперь собираем все это в кучу и получаем решение, которое Unity3D предоставляет «из коробки».

Забегая вперед, скажу, что решение «из коробки» имеет достаточно неплохую производительность и высокую гибкость. Настраивать аниматоры уже давно привыкли все, кто работают в Unity3D. Но что делать, если ваше приложение требует большей производительности?
Решение «сделай сам»
Начнем с общего концепта:
- Сделаем расчет прогресса анимации в вертексном шейдере
- Закодируем информацию о начальном кадре анимации («локальный прогресс») в альфа канале цвета вертекса (чтобы не потерять батчинг)
- Создадим компонент, который упрощает настройку анимации в Unity Editor
- Создадим компонент, который будет рассчитывать «глобальный» прогресс анимации
Далее перейдем к компоненту, который позволит легко настраивать параметры анимации из Unity Editor.
Этот скрипт работает в редакторе Unity3D и позволяет сразу увидеть изменение любых параметров на сцене, что делает настройку простой и удобной. Не забываем создать материал с выше написанным шейдером и назначить его в MeshRenderer. В редакторе Unity3D все это должно смотреться следующим образом:

Ну и теперь осталось самое простое, написать глобальный счетчик кадров. Вот и он:
Для коректной работы один компонент KalitaAtlasAC контролирует множество компонентов KalitaAnimation. Так как параметры устанавливаются через sharedMaterial, то в соответствующее поле (animation) KalitaAtlasAC затягивается любой из множества контролируемых объектов.
Тестирование
Что же, подошло время для тестирования. Для теста делаем небольшой скрипт, который позволяет создавать желаемое количество объектов на сцене.
Сравним результаты. Сперва запустим в UnityEditor с задачей отрисовать 20000 объектов.
При использовании Unity3D Animator на моем ноутбуке Dell M4800 получаем около 5 FPS:

Запускаем туже задачу с KalitaAtlasAC + KalitaAnimation и получаем 20+ FPS:

Что же будет при тестировании на реальном девайсе? Снизим количество создаваемых объектов до 2000, мы же все-таки на мобильном устройстве работать будем. В качестве подопытного под рукой оказался Samsung Galaxy S3 — i9300. При использовании Unity3D Animator получаем около 9-10 FPS:

А при использовании KalitaAtlasAC + KalitaAnimation в результате имеем 35+ FPS:

Итоги
Если вы используете большое количество анимированных объектов, которые используют спрайтовую анимацию, предложенная техника позволит уменьшить затраты на отрисовку до четырех раз, что может быть весьма критично для мобильных приложений.
Кстати, оставшиеся rgb компоненты цвета вертекса можно использовать в качестве Overlay, как это сделать показано в демо проекте.
Change the speed of animation at runtime in unity c#
I want to change the speed of animation to my desired speed during runtime of a program. I have an c# script and animator controller attached to the game object. The default speed of animation in unity is 1. I set the default speed value of animation to 0.3f. And during runtime of program, I want the speed of animation to 1.
The speed of animation did not get change to 1 even boolean value of changeSpeed is true.
3 Answers 3
To manipulate the animation speed you can use the Speed multiplier parameter field in the animation properties.
If you select the animation in the animator, you will see in the inspector this:

If you click on the «Parameter» checkbox, the Multiplier option will be enabled. In the Multiplier field, you can select a float type parameter, and the animation speed will be set the parameter’s value.
So, you can just create a new float parameter named speed , and change the speed of the animation to X through script by just executing anim.SetFloat(«speed», X);
![]()
Using the Animator Window, while the object that owns the Animator component is selected, first add a parameter using the little + sign next to the search field.

Here I called it «animSpeed» and gave it a value of 1.0 to start with. Then select the state whose animation you want to change with the animSpeed parameter and in the Inspector, under Speed, tick the Parameter checkbox next to Multiplier and make sure the parameter that drives the speed is selected, which I set to animSpeed.

On the code side, you’ll have a script that holds a reference to an Animator type. In this script you’d have an Animator field:
Plus, you would have, for example, a variable to set the animation speed:
Later in the code, likely in the Update, you can finally set the Animator’s parameter using its name (but there’s other method overloads available):
Изменить скорость анимации во время выполнения в Unity C #
Я хочу изменить скорость анимации до желаемой скорости во время выполнения программы. У меня есть скрипт С# и контроллер аниматора, прикрепленный к игровому объекту. По умолчанию скорость анимации в единстве равна 1. Я установил значение скорости по умолчанию для анимации в 0.3f. И во время выполнения программы я хочу, чтобы скорость анимации составляла 1.
Скорость анимации не получил изменится на 1, даже логическое значение changeSpeed верно.