PlayableBehaviour 是每个自定义可播放脚本派生的基类。
PlayableBehaviour 可用于向 PlayableGraph 添加用户定义的行为。
PlayableBehaviour 必须是 PlayableGraph 中连接到输出的分支的一部分才能处于活动状态。
在以下示例中,两个 AnimationClip 由两个 AnimationClipPlayable 控制,这两个 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;
// Use this for initialization void Start() { // Create the PlayableGraph. m_Graph = PlayableGraph.Create();
// Add an AnimationPlayableOutput to the graph. var animOutput = AnimationPlayableOutput.Create(m_Graph, "AnimationOutput", GetComponent<Animator>());
// Add an AnimationMixerPlayable to the graph. var mixerPlayable = AnimationMixerPlayable.Create(m_Graph, 2);
// Add two AnimationClipPlayable to the graph. var clipPlayableA = AnimationClipPlayable.Create(m_Graph, clipA); var clipPlayableB = AnimationClipPlayable.Create(m_Graph, clipB);
// Add a custom PlayableBehaviour to the graph. // This behavior will change the weights of the mixer dynamically. var blenderPlayable = ScriptPlayable<BlenderPlayableBehaviour>.Create(m_Graph, 1); blenderPlayable.GetBehaviour().mixerPlayable = mixerPlayable;
// Create the topology, connect the AnimationClipPlayable to the // AnimationMixerPlayable. Also add the BlenderPlayableBehaviour. m_Graph.Connect(clipPlayableA, 0, mixerPlayable, 0); m_Graph.Connect(clipPlayableB, 0, mixerPlayable, 1); m_Graph.Connect(mixerPlayable, 0, blenderPlayable, 0);
// Use the ScriptPlayable as the source for the AnimationPlayableOutput. // Since it's a ScriptPlayable, also set the source input port to make the // passthrough to the AnimationMixerPlayable. animOutput.SetSourcePlayable(blenderPlayable); animOutput.SetSourceInputPort(0);
// Play the graph. m_Graph.Play(); }
private void OnDestroy() { // Destroy the graph once done with it. m_Graph.Destroy(); } }
OnBehaviourPause | 当以下情况之一发生时,将调用此方法:遍历期间的有效播放状态更改为 PlayState.Paused。此状态由 FrameData.effectivePlayState 指示。PlayableGraph 停止,而可播放的播放状态为 Playing。此状态由 PlayableGraph.IsPlaying 返回 true 指示。 |
OnBehaviourPlay | 当可播放的播放状态更改为 PlayState.Playing 时,将调用此函数。 |
OnGraphStart | 当拥有此 PlayableBehaviour 的 PlayableGraph 启动时,将调用此函数。 |
OnGraphStop | 当拥有此 PlayableBehaviour 的 PlayableGraph 停止时,将调用此函数。 |
OnPlayableCreate | 当拥有 PlayableBehaviour 的 Playable 创建时,将调用此函数。 |
OnPlayableDestroy | 当拥有 PlayableBehaviour 的 Playable 被销毁时,将调用此函数。 |
PrepareData | 此函数在 PlayableGraph 的 PrepareData 阶段调用。 |
PrepareFrame | 此函数在 PlayableGraph 的 PrepareFrame 阶段调用。 |
ProcessFrame | 此函数在 PlayableGraph 的 ProcessFrame 阶段调用。 |