unity3d
Unity Animation
Поиск…
Основная анимация для бега
Этот код показывает простой пример анимации в Unity.
Для этого примера у вас должно быть 2 анимационных клипа; Run и Idle. Эти анимации должны быть движками Stand-In-Place. После выбора клипов анимации создайте Animator Controller. Добавьте этот контроллер к игроку или игровому объекту, который хотите оживить.
Откройте окно Animator из окна Windows. Перетащите 2 анимационных клипа в окно Animator и создайте 2 состояния. После создания используйте вкладку левых параметров, чтобы добавить 2 параметра, оба из них как bool. Назовите его «PerformRun» и другие как «PerformIdle». Установите для параметра «PerformIdle» значение true.
Сделайте переход из состояния ожидания для запуска и запуска в режим ожидания (см. Изображение). Перейдите в режим Idle-> Run и в окне Inspector отмените выбор HasExit. Сделайте то же самое для другого перехода. Для перехода в режим Idle-> Run добавьте условие: PerformIdle. Для Run-> Idle добавьте условие: PerformRun. Добавьте скрипт C #, указанный ниже, в игровой объект. Он должен запускаться с анимацией с помощью кнопки «Вверх» и поворот с помощью кнопок «Влево» и «Вправо».
using UnityEngine;
using System.Collections;
public class RootMotion : MonoBehaviour {
//Public Variables
[Header("Transform Variables")]
public float RunSpeed = 0.1f;
public float TurnSpeed = 6.0f;
Animator animator;
void Start()
{
/**
* Initialize the animator that is attached on the current game object i.e. on which you will attach this script.
*/
animator = GetComponent<Animator>();
}
void Update()
{
/**
* The Update() function will get the bool parameters from the animator state machine and set the values provided by the user.
* Here, I have only added animation for Run and Idle. When the Up key is pressed, Run animation is played. When we let go, Idle is played.
*/
if (Input.GetKey (KeyCode.UpArrow)) {
animator.SetBool ("PerformRun", true);
animator.SetBool ("PerformIdle", false);
} else {
animator.SetBool ("PerformRun", false);
animator.SetBool ("PerformIdle", true);
}
}
void OnAnimatorMove()
{
/**
* OnAnimatorMove() function will shadow the "Apply Root Motion" on the animator. Your game objects psoition will now be determined
* using this fucntion.
*/
if (Input.GetKey (KeyCode.UpArrow)){
transform.Translate (Vector3.forward * RunSpeed);
if (Input.GetKey (KeyCode.RightArrow)) {
transform.Rotate (Vector3.up * Time.deltaTime * TurnSpeed);
}
else if (Input.GetKey (KeyCode.LeftArrow)) {
transform.Rotate (-Vector3.up * Time.deltaTime * TurnSpeed);
}
}
}
}
Создание и использование анимационных клипов
В этом примере будет показано, как создавать и использовать клипы анимации для игровых объектов или игроков.
Обратите внимание: модели, используемые в этом примере, загружаются из Unity Asset Store. Игрок был загружен со следующей ссылки: https://www.assetstore.unity3d.com/ru/#!/content/21874 .
Чтобы создать анимацию, сначала откройте окно анимации. Вы можете открыть его, нажав «Окно» и «Выбрать анимацию» или нажмите Ctrl + 6. Выберите игровой объект, к которому вы хотите применить клип анимации, из окна «Иерархия», а затем нажмите кнопку «Создать» в окне анимации.
Назовите свою анимацию (например, IdlePlayer, SprintPlayer, DyingPlayer и т. Д.) И сохраните ее. Теперь из окна анимации нажмите кнопку «Добавить свойство». Это позволит вам изменить свойство игрового объекта или игрока по времени. Это может включать в себя Tranforms, такие как вращение, положение и масштаб, а также любое другое свойство, которое привязано к игровому объекту, например, коллайдер, Mesh Renderer и т. Д.
Чтобы создать запущенную анимацию для игрового объекта, вам понадобится гуманоидальная 3D-модель. Вы можете загрузить модель из приведенной выше ссылки. Следуйте приведенным выше шагам, чтобы создать новую анимацию. Добавьте свойство Transform и выберите Rotation для одной из ног персонажа.
В этот момент ваши кнопки Play и Rotation в свойстве игрового объекта стали бы красными. Нажмите стрелку вниз, чтобы увидеть значения вращения X, Y и Z. Время анимации по умолчанию равно 1 секунде. Анимации используют ключевые кадры для интерполяции между значениями. Чтобы оживить, добавьте ключи в разные моменты времени и измените значения вращения из окна «Инспектор». Например, значение вращения в момент 0.0 может быть 0.0. В момент 0.5s значение может быть 20.0 для X. В момент 1.0s значение может быть 0.0. Мы можем завершить анимацию в 1.0s.
Длина вашей анимации зависит от последних добавленных к анимации клавиш. Вы можете добавить больше клавиш, чтобы сделать интерполяцию более плавной.
2D-анимация Sprite
Анимация Sprite состоит в показе существующей последовательности изображений или фреймов.
Сначала импортируйте последовательность изображений в папку ресурса. Либо создайте некоторые изображения с нуля, либо загрузите их из хранилища активов. (В этом примере используется этот бесплатный актив .)
Перетащите каждое отдельное изображение одной анимации из папки ресурсов в представление сцены. Unity покажет диалог для именования нового клипа анимации.
Это полезный ярлык для:
- создание новых игровых объектов
- назначая два компонента (Sprite Renderer и Animator)
- создание анимационных контроллеров (и привязка нового компонента Animator к ним)
- создание анимационных клипов с выбранными кадрами
Предварительный просмотр воспроизведения на вкладке анимации, нажав кнопку «Воспроизвести»:
Этот же метод можно использовать для создания новых анимаций для одного и того же игрового объекта, а затем для удаления нового игрового объекта и контроллера анимации. Добавьте новый анимационный клип в контроллер анимации этого объекта так же, как и с 3D-анимацией.
Анимационные кривые
Анимационные кривые позволяют вам изменять параметр float при воспроизведении анимации. Например, если есть анимация длительностью 60 секунд и вам нужно значение float / параметр, вызовите его X, чтобы измениться по анимации (например, во время анимации = 0.0, X = 0.0, во время анимации = 30,0 с; X = 1,0, во время анимации = 60,0 с, X = 0,0).
После того как вы получили значение float, вы можете использовать его для перевода, поворота, масштабирования или использования его любым другим способом.
Для моего примера я покажу игровой игровой объект. Когда анимация для запуска воспроизводится, скорость перевода игрока должна возрастать по мере продолжения анимации. Когда анимация достигает своего конца, скорость перевода должна уменьшаться.
У меня создан запущенный анимационный клип. Выберите клип, а затем в окне инспектора нажмите «Изменить».
После этого прокрутите вниз до Curves. Нажмите на знак +, чтобы добавить кривую. Назовите кривую, например, ForwardRunCurve. Нажмите на миниатюрную кривую справа. Он откроет небольшое окно с кривой по умолчанию.
Нам нужна параболическая кривая, где она поднимается, а затем падает. По умолчанию на линии есть 2 точки. Вы можете добавить больше очков, дважды щелкнув по кривой. Перетащите точки, чтобы создать форму, похожую на следующую.
В окне Animator добавьте текущий клип. Также добавьте параметр float с тем же именем, что и кривая, т.е. ForwardRunCurve.
Когда анимация воспроизводится, значение поплавка изменяется в соответствии с кривой. Следующий код покажет, как использовать значение float:
using UnityEngine;
using System.Collections;
public class RunAnimation : MonoBehaviour {
Animator animator;
float curveValue;
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
curveValue = animator.GetFloat("ForwardRunCurve");
transform.Translate (Vector3.forward * curveValue);
}
}
Переменная curveValue удерживает значение кривой (ForwardRunCruve) в любой момент времени. Мы используем это значение для изменения скорости перевода. Вы можете прикрепить этот скрипт к игровому объекту игрока.