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

Управление игровым состоянием

В этом примере показано, как использовать методы Pause() и Play() для управления состоянием воспроизведения одного узла, ветви или всего PlayableGraph.

Когда вы задаёте состояние воспроизведения узла, оно распространяется на все дочерние узлы независимо от их собственного состояния воспроизведения. Например, если дочерний узел приостановлен, задание воспроизведения родительскому узлу заставит воспроизводиться и дочерний.

В этом примере PlayableGraph имеет смеситель, который объединяет два анимационных клипа. AnimationClipPlayable обворачивает каждый анимационный клип и Pause() метод явно приостанавливает второй воспроизводимый (clipPlayable1). Поскольку второй AnimationClipPlayable явно поставлен на паузу, его внутреннее время не идёт, и он выдаёт одно и то же значение. Это значение — момент времени, когда AnimationClipPlayable был сначала приостановлен.

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

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

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

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

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

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

    using UnityEngine;
    using UnityEngine.Playables;
    using UnityEngine.Animations;
    
    [RequireComponent(typeof(Animator))]
    public class ControlPlayState : MonoBehaviour
    {
        public AnimationClip clip0;
        public AnimationClip clip1;
    
        PlayableGraph graph;
        AnimationMixerPlayable mixer;
    
        void Start()
        {
            // Create the graph and the mixer, then bind them to the Animator.
            graph = PlayableGraph.Create("ControlPlayState");
            mixer = AnimationMixerPlayable.Create(graph, 2);
    
            var output = AnimationPlayableOutput.Create(graph, "Animation", GetComponent<Animator>());
            output.SetSourcePlayable(mixer);
    
            // Create 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);
    
            // Adjust the weight of each mixer input.
            mixer.SetInputWeight(0, 0.5f);
            mixer.SetInputWeight(1, 0.5f);
    
            // Pause the second clip playable.
            clipPlayable1.Pause();
    
            // Play the Graph.
            graph.Play();
        }
    
        void OnDisable()
        {
            // Destroy all Playables and outputs created by the graph.
            graph.Destroy();
        }
    }
    
  2. В компоненте Скрипт выберите анимационные клипы (clip0, clip1) для слияния.

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

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

PlayableGraph генерируется ControlPlayState. Скрипт приостанавливает второй клип анимации.
PlayableGraph генерируется ControlPlayState. Скрипт приостанавливает второй клип анимации.

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