TimeLine更换物体绑定[转载]

TimeLine更换物体绑定

Posted by 坏人 on August 16, 2021

简介:

    使用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方法后,讲场景中的物体动态设置到指定的轨道中。

———————————————— 版权声明:本文为CSDN博主「真像大白阿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/mango9126/article/details/100155999