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

Слияние двух анимационных клипов

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

В этом примере вы выбираете два анимационных клипа (clip0 и clip1). Перед слиянием анимационных клипов вы должны обернуть каждый AnimationClip в AnimationClipPlayable (clipPlayable0 и clipPlayable1). Используйте метод SetInputWeight() для динамической настройки веса слияния каждого воспроизводимого клипа.

Вы также можете использовать AnimationMixerPlayable и для слияния воспроизводимого клипа с контроллером анимации.

Предварительные условия

Перед тем, как использовать скрипт BlendAnimationClips в вашем проекте, в нем должно быть следующее:

  • GameObject, например, куб или капсула. Вам не нужно вручную добавлять компонент Animator к этому GameObject. Атрибут RequireComponent добавляет этот компонент, если он не присутствует.
  • Два анимационных клипа, которые анимируют свойства GameObject. Чтобы слияние между анимационными клипами было заметно, используйте два клипа, которые отличаются друг от друга. Например, один клип анимирует положение GameObject, а другой клип анимирует вращение.

Добавление и запуск скрипта

Чтобы использовать скрипт BlendAnimationClips в вашем проекте, выполните следующие действия:

  1. Добавьте компонент скрипта в файл GameObject. Назовите файл скрипта BlendAnimationClips.cs и используйте следующий код:

    using UnityEngine;
    using UnityEngine.Playables;
    using UnityEngine.Animations;
    
    [RequireComponent(typeof(Animator))]
    public class BlendAnimationClips : MonoBehaviour
    {
    
        public AnimationClip clip0;
        public AnimationClip clip1;
        public float weight;
        PlayableGraph graph;
        AnimationMixerPlayable mixer;
    
        void Start()
        {
            // Create the graph and the mixer, then bind them to the Animator.
            graph = PlayableGraph.Create("BlendAnimationClips");
            mixer = AnimationMixerPlayable.Create(graph, 2);
    
            var output = AnimationPlayableOutput.Create(graph, "Animation", GetComponent<Animator>());
            output.SetSourcePlayable(mixer);
    
            // Create two AnimationClipPlayable playables, then connect them to the mixer.
            var clipPlayable0 = AnimationClipPlayable.Create(graph, clip0);
            var clipPlayable1 = AnimationClipPlayable.Create(graph, clip1);
    
            graph.Connect(clipPlayable0, 0, mixer, 0);
            graph.Connect(clipPlayable1, 0, mixer, 1);
    
            // Play the Graph.
            graph.Play();
        }
    
        void Update()
        {
            weight = Mathf.Clamp01(weight);
            mixer.SetInputWeight(0, 1.0f-weight);
            mixer.SetInputWeight(1, weight);
        }
    
        void OnDisable()
        {
            // Destroy all Playables and outputs created by the graph.
            graph.Destroy();
        }
    }
    
  2. В компоненте Скрипт выберите анимационные клипы (clip0, clip1) для слияния.

  3. Укажите вес (weight) для обоих клипов. Скрипт регулирует вес первого клипа по отношению ко второму клипу, чтобы обеспечить, что вес обоих клипов равен 1.0. Например, вес 0.2 устанавливает второй клип на 20% веса, а первый клип на 80% веса.

  4. Выберите Играть, чтобы переключить редактор в режим воспроизведения.

  5. В компоненте Скрипт поэкспериментируйте с различными весами.

  6. Если установлен пакет визуализатора PlayableGraph, выберите BlendAnimationClips для отображения PlayableGraph.

PlayableGraph, созданный скриптом BlendAnimationClips
PlayableGraph, генерируемый скриптом BlendAnimationClips

Дополнительные ресурсы