Unity Timeline动态修改绑定资源

简介:

    使用Timeline可以非常方便的进行场景动画的创建和修改,包括物体、声音、粒子、动画、特效、自定义Playable以及子Timeline等多种资源进行整合,从而能够较方便的生成效果很棒的场景动画。

有些时候在使用Timeline进行过场动画制作,要在场景中新建Timeline后把指定要做动画的物体拖入轨道,这样可以在运行的时候,播放该轨道,但是很多时候,我们需要代码去动态设置轨道的资源。例如下图中,需要代码设置Cube为游戏运行时候的物体,此时该物体即可使用当前Track1轨道信息播放相应的动作。

Unity的PlayableDirector类中,可以获取到当前Timeline资源的所有轨道信息和轨道中的所有Clip信息,使用相应的API可以实现动态设置轨道的操作。

1.可以在Start函数中,使用Dictionary获取当前所有Binding轨道信息,key使用轨道名称:Animation Track, value即为当前轨道,这样所有的轨道信息都记录在当前字典中。


    private PlayableDirector playableDirector;
    private readonly Dictionary<string, PlayableBinding> bindingDict = new Dictionary<string, PlayableBinding>();
    private void Start()
    {
        playableDirector = GetComponent<PlayableDirector>();

        //开始的时候,储存所有轨道信息,轨道名称作为key,Track作为value,用于动态设置
        foreach (var bind in playableDirector.playableAsset.outputs)
        {
            if (!bindingDict.ContainsKey(bind.streamName))
            {
                bindingDict.Add(bind.streamName, bind);
            }
        }
    }

2.使用SetGenericBinding的方法,动态设置绑定轨道

    /// <summary>
    /// 动态设置轨道
    /// </summary>
    /// <param name="trackName"></param>
    /// <param name="gameObject"></param>
    public void SetTrackDynamic(string trackName, GameObject gameObject)
    {
        if (bindingDict.TryGetValue(trackName, out PlayableBinding pb))
        {
            playableDirector.SetGenericBinding(pb.sourceObject, gameObject);
        }
    }

3.这样既可在代码使用SetTrackDynamic方法后,讲场景中的物体动态设置到指定的轨道中。

猜你喜欢

转载自blog.csdn.net/mango9126/article/details/100155999
今日推荐