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;
// 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 指示。 在可播放项播放状态为 Playing 时停止 PlayableGraph。此状态由 PlayableGraph.IsPlaying 返回的 true 结果指示。 |
OnBehaviourPlay | 在 Playable 播放状态更改为 PlayState.Playing 时调用此函数。 |
OnGraphStart | 在拥有此 PlayableBehaviour 的 PlayableGraph 启动时调用此函数。 |
OnGraphStop | 在拥有此 PlayableBehaviour 的 PlayableGraph 停止时调用此函数。 |
OnPlayableCreate | 在拥有 PlayableBehaviour 的 Playable 创建后调用此函数。 |
OnPlayableDestroy | 在拥有 PlayableBehaviour 的 Playable 销毁后调用此函数。 |
PrepareData | 在 PlayableGraph 的 PrepareData 阶段调用此函数。 |
PrepareFrame | 在 PlayableGraph 的 PrepareFrame 阶段调用此函数。 |
ProcessFrame | 在 PlayableGraph 的 ProcessFrame 阶段调用此函数。 |