我在一个场景中需要多个固定相机切换,我使用Cinemachine 来当作相机的位置,很方便调试。但是在实际中使用priority切换不同的相机时,会有过度效果。

我解决的方式就是获取指定TimeLineClip的所消耗的所有时间(时经过clip时间的累加),然后把TimeLine的时间直接跳转到指定TimeLineClip的位置。
获取所有的轨道和每个轨道的Clip
[Header("播放TimeLine的物体")] public PlayableDirector Director;
public Dictionary<string, PlayableBinding> bindingDict = new Dictionary<string, PlayableBinding>(); //获取TimeLine的轨道
public Dictionary<string, List<double>> dicTimelineClips = new Dictionary<string, List<double>>(); //存储TimeLine Clip
private void Start()
{
InitAttributes();
}
/// <summary>
/// 初始化
/// </summary>
private void InitAttributes()
{
bindingDict.Clear();
dicTimelineClips.Clear();
foreach (PlayableBinding pb in Director.playableAsset.outputs)
{
if (!bindingDict.ContainsKey(pb.streamName))
{
bindingDict.Add(pb.streamName, pb);
Debug.Log(pb.streamName);
var track = bindingDict[pb.streamName].sourceObject as TrackAsset;
if (track != null)
{
List<double> timelineClips = new List<double>();
foreach (TimelineClip clip in track.GetClips())
{
timelineClips.Add(clip.duration);
Debug.Log("name:" + clip.displayName + "时间:" + clip.duration);
}
dicTimelineClips.Add(pb.streamName, timelineClips);
}
}
}
}
网友评论