学习Playable的大致逻辑和组成,最后用Playable播放一个简单的动画。

Playable介绍

  • Playables API 支持动态动画混合。这意味着场景中的对象可以提供自己的动画。例如,武器、宝箱和陷阱的动画可以动态添加到 PlayableGraph 并使用一段时间。

  • Playables API 可让您轻松播放单个动画,而不会产生创建和管理 AnimatorController 资源所涉及的开销。

  • Playables API 允许用户动态创建混合图并直接逐帧控制混合权重。

  • 可在运行时创建 PlayableGraph,根据条件按需添加可播放节点。可量身定制 PlayableGraph 来适应当前情况的要求,而不是提供一个巨大的“一刀切”图形来启用和禁用节点。

以上摘自官方中文手册介绍https://docs.unity3d.com/cn/current/Manual/Playables-Graph.html

alt

简要示例如上。

安装Playable可视化插件 com.unity.playablegraph-visualizer ,用 git from url。

alt

安装完在这里打开窗口。

alt

找一个AnimatorController就能看到对应的Playable可视化,说明其也是基于Animator运作的。 alt

代码实现创建PlayableGraph并播放clip

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Animations;
public class Animation_Controller : MonoBehaviour
{
    [SerializeField] Animator animator;
    [SerializeField] AnimationClip animationClip;
    private PlayableGraph graph;
    private void Start()
    {
        // 1.创建图
        graph = PlayableGraph.Create("Animation");

        // 2.设置图的时间模式
        graph.SetTimeUpdateMode(DirectorUpdateMode.GameTime);

        // 3.创建ClipPlayable然后去包裹一个AnimationClip
        AnimationClipPlayable clipPlayable = AnimationClipPlayable.Create(graph, animationClip);

        // 4.创建Output
        AnimationPlayableOutput playableOutput = AnimationPlayableOutput.Create(graph, "Animation", animator);

        // 5.让ClipPlayable链接上OutPut
        playableOutput.SetSourcePlayable(clipPlayable);

        // 6.播放图
        graph.Play();

    }
    private void OnDisable()
    {
		// 7.销毁PlayableGraph
        graph.Destroy();

    }
}

需要animationClip来指定播放的动画片段,一个空的AnimatorController作为载体接受PlayableOutPut。

alt

第三步说明下,在Playable上看到的蓝色AnimationClip作为节点实际省略了Playable后缀,他里面包裹了一个AnimationClip。

创建的PlayableGraph如下:

alt

运行后即可播放AnimationClip动画片段。