简介:
使用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