これまで触ってなかったUnityの「TimeLine」について調べる機会がありました。 その中で「Playable」についてブログに書いていきたいと思います。
Playable API
調べるとUnityには「Playable API」と呼ばれるものがあるのがわかりました。 これは、アニメーションを処理Animator Controllerとかで使われている内部処理を行っているのがPlayable Apiです。
Animation Controller
個人的にAnimator Controllerも余り触ったことないのですが、次の画像のようにStateでAnimationを管理しています。
PlayableGraph
PlayableGraph を使用すると、複数のデータソースをミックス、ブレンド、変更し、1 つの出力として再生できます。 例えばAnimator Controllerで行うことのできるAnimationの再生やブレンドなどが実装できます。Animationだけではなく、Audioや独自に定義したScriptなどを組み合わせることができます。
また、Scriptで生成ができるので、ゲーム再生中などで動的に作成することができます。ですので、AnimatorControllerのように事前にAssetを用意しておく必要はありません。
PlayableGraph visualizer
PlayableGraphのPlayableがノードベースで確認できるWindowです。 PackageManagerからインストールできます。
GitHub - Unity-Technologies/graph-visualizer: Visualizer for your Playable graphs
PlayableGraphの生成
var playableGraph = PlayableGraph.Create()
PlayableGraphの再生
playableGraph.Play();
Playable
playable は IPlayable インターフェースを実装する C# 構造体です。 Playableを組み合わせてPlayableGraphを作っていきます。
主なPlayable
- AnimationClipPlayable
- AnimationMixerPlayable
- CameraPlayable
- TextureMixerPlayable
PlayableGraphにPlayableを紐付ける
playableを生成するときに、PlayableGraphを紐付けます。
var animationClipPlayable = AnimationClipPlayable.Create(playableGraph, clip);
PlayableOutput
PlayableGraphはPlayableOutputを使って出力を行います。 出力形式に応じてOutputクラスが違います。
主なPlayableOutput
- AnimationPlayableOutput
- AudioPlayableOutput
- ScriptPlayableOutput
- TexturerPlayaleOutput
PlayableGraphにPlayableOutputを紐付ける
playableOutputを生成するときに、PlayableGraphを紐付けます。
var playableOutput = AnimationPlayableOutput.Create(playableGraph, "Name", animator);
簡単な例
AnimationClipを再生するPlayableGraphです。
// 生成 _playableGraph = PlayableGraph.Create(); // PlayableGraphに PlayableとOutputを紐付ける var animationClipPlayable = AnimationClipPlayable.Create(_playableGraph, _clip); var animationPlayableOutput = AnimationPlayableOutput.Create(_playableGraph, "Animation", GetComponent<Animator>()); // 出力設定 animationPlayableOutput.SetSourcePlayable(animationClipPlayable); // 再生 _playableGraph.Play();
Playable詳細
visualizerの中でノードをチェックすると詳細を見ることができます。 AnimationClipの場合、Timeが渡されています。このTimeを元にアニメーションを再生しています。
PlayableとTimeline
最後に本来調べていた項目であるTImelineとの関係です。 まず何もないTimelineをVisualizerで見ると次のように表示されます。
Visualizerに表示されるということはTimeLineはPlayableGraphで構成されていそうです。
Trackを追加してみる
試しにActivation TrackをTimelineに追加をしてみると、PlayableGraphの構成が変わりました。
挙動だけを見ると「ActivationMixer」と「Playable」が追加された感じです。
複数追加すると
次にもう一つActivation Trackを追加してみます。
TimelineのTrackごとにOutputが設定されます。 今回は同じTrackを追加したのでOutputはScriptOutputになっています。
TimelinePlayable
Outputする前にかならずTimelinePlayableを通っています。 TimelinePlayableでは、 TrackとそのClipを担当しているPlayableを作成してリンクする役割をしています。
最後に
今回調べてみて、Playableについてなんとなくその概要がわかってきました。 次はTimelineで使われているPlayableを拡張周りをどうやってやるのかや、実際にPlayableを使ったらないができるかなどが気になりましたので、その辺り調査したいと思っています。