うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】PlayableGraph を利用した AnimationClip を再生するコンポーネント

AnimationClip を 一つだけ再生する場合でも Animator を作成して
Stateを作り AnimationClip を設定する必要があるのが面倒だったので、PlayableGraph を利用して
AnimationClip のみセットすれば動作するコンポーネントを作成

f:id:hacchi_man:20200803200613p:plain

Animation というコンポーネントがありますが、これは AnimationClip をセットしても
動かなかったので使えないという認識です・・・

using UnityEngine;
using UnityEngine.Animations;
using UnityEngine.Playables;

public class AnimationClipPlayer : MonoBehaviour
{
    [SerializeField]
    private AnimationClip _animationClip;

    private PlayableGraph _graph;

    private void Start()
    {
        _graph = PlayableGraph.Create();
        _graph.SetTimeUpdateMode(DirectorUpdateMode.GameTime);

        var playable = AnimationClipPlayable.Create(_graph, _animationClip);

        var anim = GetComponent<Animator>() ?? gameObject.AddComponent<Animator>();

        var output = AnimationPlayableOutput.Create(_graph, "output", anim);
        output.SetSourcePlayable(playable);

        Play();
    }
 
    private void OnDestroy()
    {
        if (_graph.IsValid())
            _graph.Destroy();
    }
 
    public void Play()
    {
        _graph.Play();
    }
 
    public void Stop()
    {
        _graph.Stop();
    }
}