Описание
PlayableBehaviour — это базовый класс, от которого наследуется каждый настраиваемый игровой сценарий.
С помощью PlayableBehaviour можно добавить определяемое пользователем поведение в PlayableGraph.
PlayableBehaviour должен быть частью ветви PlayableGraph, которая подключена к выходу, чтобы быть активным.
В следующем примере два AnimationClip управляются двумя AnimationClipPlayable, которые смешиваются с помощью AnimationMixerPlayable. Пользовательский BlenderPlayableBehaviour изменяет входной вес AnimationMixerPlayable в каждом кадре.
using UnityEngine;
using UnityEngine.Animations;
using UnityEngine.Playables;
public class BlenderPlayableBehaviour : PlayableBehaviour
{
public AnimationMixerPlayable mixerPlayable;
public override void PrepareFrame(Playable playable, FrameData info)
{
float blend = Mathf.PingPong((float)playable.GetTime(), 1.0f);
mixerPlayable.SetInputWeight(0, blend);
mixerPlayable.SetInputWeight(1, 1.0f - blend);
base.PrepareFrame(playable, info);
}
}
public class PlayableBehaviourSample : MonoBehaviour
{
PlayableGraph m_Graph;
public AnimationClip clipA;
public AnimationClip clipB;
// Используйте это для инициализации
void Start()
{
// Создаем PlayableGraph.
m_Graph = PlayableGraph.Create();
// Добавляем AnimationPlayableOutput к графику.
var animOutput = AnimationPlayableOutput.Create(m_Graph, "AnimationOutput", GetComponent<Animator>());
/ Добавляем AnimationMixerPlayable к графику.
var mixerPlayable = AnimationMixerPlayable.Create(m_Graph, 2, false);
// Добавляем два AnimationClipPlayable к графику
var clipPlayableA = AnimationClipPlayable.Create(m_Graph, clipA);
var clipPlayableB = AnimationClipPlayable.Create(m_Graph, clipB);
// Добавляем пользовательский PlayableBehaviour к графику
// Это поведение будет динамически изменять вес микшера.
var blenderPlayable = ScriptPlayable.Create(m_Graph, 1);
blenderPlayable.GetBehaviour().mixerPlayable = mixerPlayable;
// Создаем топологию, подключаем AnimationClipPlayable к
// AnimationMixerPlayable. Иначе добавляем BlenderPlayableBehaviour.
m_Graph.Connect(clipPlayableA, 0, mixerPlayable, 0);
m_Graph.Connect(clipPlayableB, 0, mixerPlayable, 1);
m_Graph.Connect(mixerPlayable, 0, blenderPlayable, 0);
// Использовать ScriptPlayable в качестве источника для AnimationPlayableOutput.
// Так как это ScriptPlayable, также установите исходный входной порт, чтобы сделать
// переход к AnimationMixerPlayable.
animOutput.SetSourcePlayable(blenderPlayable);
animOutput.SetSourceInputPort(0);
// Воспроизвести график.
m_Graph.Play();
}
private void OnDestroy()
{
// Создаем топологию, подключаем
m_Graph.Destroy();
}
}
Публичные Методы
OnBehaviourPause | Этот метод вызывается при возникновении одной из следующих ситуаций: Эффективное состояние воспроизведения во время обхода изменяется на PlayState.Paused. На это состояние указывает FrameData.EffectivePlayState. PlayableGraph останавливается, пока состояние playable play находится в Playing. На это состояние указывает PlayableGraph.IsPlaying, возвращающее значение true. |
OnBehaviourPlay | Эта функция вызывается, когда состояние воспроизведения Playable изменяется на PlayState.Playing. |
OnGraphStart | Эта функция вызывается при запуске PlayableGraph, которому принадлежит этот PlayableBehaviour. |
OnGraphStop | Эта функция вызывается, когда PlayableGraph, владеющий этим PlayableBehaviour, останавливается. |
OnPlayableCreate | Эта функция вызывается при создании Playable, которому принадлежит PlayableBehaviour. |
OnPlayableDestroy | Эта функция вызывается, когда Playable, которому принадлежит PlayableBehaviour, уничтожается. |
PrepareData | Эта функция вызывается во время фазы PrepareData PlayableGraph. |
PrepareFrame | Эта функция вызывается во время фазы PrepareFrame PlayableGraph. |
ProcessFrame | Эта функция вызывается во время фазы ProcessFrame PlayableGraph. |