Поиск…


Основная анимация для бега

Этот код показывает простой пример анимации в 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 к ним)
  • создание анимационных клипов с выбранными кадрами

новый инспектор игрового объекта, показывающий новые компоненты

Предварительный просмотр воспроизведения на вкладке анимации, нажав кнопку «Воспроизвести»:

Предварительный просмотр анимации 2d

Этот же метод можно использовать для создания новых анимаций для одного и того же игрового объекта, а затем для удаления нового игрового объекта и контроллера анимации. Добавьте новый анимационный клип в контроллер анимации этого объекта так же, как и с 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) в любой момент времени. Мы используем это значение для изменения скорости перевода. Вы можете прикрепить этот скрипт к игровому объекту игрока.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow