Слияние двух анимационных клипов
В этом примере показано, как использовать AnimationMixerPlayable для слияния двух анимационных клипов.
В этом примере вы выбираете два анимационных клипа (clip0 и clip1). Перед слиянием анимационных клипов вы должны обернуть каждый AnimationClip в AnimationClipPlayable (clipPlayable0 и clipPlayable1). Используйте метод SetInputWeight() для динамической настройки веса слияния каждого воспроизводимого клипа.
Вы также можете использовать AnimationMixerPlayable и для слияния воспроизводимого клипа с контроллером анимации.
Предварительные условия
Перед тем, как использовать скрипт BlendAnimationClips в вашем проекте, в нем должно быть следующее:
- GameObject, например, куб или капсула. Вам не нужно вручную добавлять компонент Animator к этому GameObject. Атрибут
RequireComponentдобавляет этот компонент, если он не присутствует. - Два анимационных клипа, которые анимируют свойства GameObject. Чтобы слияние между анимационными клипами было заметно, используйте два клипа, которые отличаются друг от друга. Например, один клип анимирует положение GameObject, а другой клип анимирует вращение.
Добавление и запуск скрипта
Чтобы использовать скрипт BlendAnimationClips в вашем проекте, выполните следующие действия:
-
Добавьте компонент скрипта в файл 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(); } } В компоненте Скрипт выберите анимационные клипы (
clip0,clip1) для слияния.Укажите вес (
weight) для обоих клипов. Скрипт регулирует вес первого клипа по отношению ко второму клипу, чтобы обеспечить, что вес обоих клипов равен 1.0. Например, вес 0.2 устанавливает второй клип на 20% веса, а первый клип на 80% веса.Выберите Играть, чтобы переключить редактор в режим воспроизведения.
В компоненте Скрипт поэкспериментируйте с различными весами.
Если установлен пакет визуализатора PlayableGraph, выберите
BlendAnimationClipsдля отображения PlayableGraph.
BlendAnimationClips