Version: 2023.2

PlayableBehaviour

class in UnityEngine.Playables


实现接口:IPlayableBehaviour

切换到手册

描述

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 阶段调用此函数。