Unity 6.3
0 онлайн 97 гостей 3 в системе
Вход
Animation Шаг 28 из 74

Скрипт Root Motion

Иногда ваша анимация приходит как «на месте», что означает, что если вы поместите его в сцене, он не будет двигаться персонаж, который он на. Другими словами, анимация не содержит «корневого движения». Для этого, вы можете изменить корневое движение из скрипта. Чтобы поставить все вместе следуйте шагам ниже (обратите внимание, есть много вариаций достижения одного и того же результата, это только один рецепт).

  1. Откройте инспектор для файла FBX, содержащего анимацию на месте, и перейдите на вкладку Animation.

  2. Убедитесь, что Определение мышц установлена на Аватара, который вы намерены контролировать (скажем, этот аватар называется Дуда, и он уже был добавлен в Hierarchy Вид).

  3. Выберите анимационный клип из доступных клипов.

  4. Убедитесь Поза петли правильно выравнивается (световой сигнал рядом с ним зеленый), и что флажок для Поза петли нажата кнопка.

    На вкладке Animation отображается выбранный клип анимации Run с включенным свойством Loop Pose. Начало и конец цикла совпадают, как указано в Loop Match зеленым цветом.
    На вкладке Animation отображается выбранный клип анимации Run с включенным свойством Loop Pose. Начало и конец цикла совпадают, как указано в Loop Match зеленым цветом.
  5. Просмотрите анимацию в просмотрщике анимаций, чтобы убедиться, что начало и конец анимации гладко выравниваются и что персонаж движется «на месте».

  6. На клипе анимации создайте кривую, которая будет контролировать скорость персонажа (вы можете добавить кривую из инспектора импорта Animation Curves-> +).

  7. Назовите эту кривую что-то значимое, например, “Runspeed”.

    Свойство Кривые расширено и отображает кривую анимации для свойства Runspeed.
    Свойство Кривые расширено и отображает кривую анимации для свойства Runspeed.
  8. Создать новый Animator Контролер, (назовем это RootMotionController).

  9. Перетащите в него нужный клип анимации — это должно создать состояние с именем анимации (скажем, Run).

  10. Добавьте параметр к Контроллеру с тем же именем, что и кривая (в данном случае, “Runspeed”).

    Параметр Runspeed добавлен в BaseLayer из RootMotionController.
    Параметр Runspeed добавлен в BaseLayer из RootMotionController.
  11. Выберите персонажа Dude в Hierarchy, инспектор которого уже должен иметь компонент Animator.

  12. Перетащите RootMotionController на свойство Контролер Animator.

  13. Если вы нажмете кнопку воспроизведения сейчас, вы должны увидеть “Dude” работает на месте.

  14. Наконец, для управления движением вам нужно создать скрипт (RootMotionScript.cs), который реализует обратный вызов OnAnimatorMove:

    using UnityEngine;
    using System.Collections;
    
    [RequireComponent(typeof(Animator))]
    
    public class RootMotionScript : MonoBehaviour {
    
       void OnAnimatorMove()
       {
          Animator animator = GetComponent<Animator>();
    
          if (animator)
          {
             Vector3 newPosition = transform.position;
             newPosition.z += animator.GetFloat("Runspeed") * Time.deltaTime;
             transform.position = newPosition;
          }
       }
    }
    
  15. Вы должны присоединить RootMotionScript.cs к объекту “Dude”. Когда вы это сделаете, компонент Animator обнаружит, что в скрипте есть функция OnAnimatorMove и покажет свойство Apply Root Motion как Обработано Скриптом

    Компонент Animator, у которого для свойства Apply Root Motion задано значение Handled by Script.
    Компонент Animator, у которого для свойства Apply Root Motion задано значение Handled by Script.