Unity timeline动态绑定clip的值

需求

由于项目多相机切换timeline的需求,要给timeline动态赋值,实现从不同机位切换到固定机位的效果,国内技术网站没有找到能简洁实现的代码,所以自己记录一下实现的代码,方便需要的人

思路

1.通过PlayableDirector获取Track

代码

            timelineAsset = (TimelineAsset)director.playableAsset;
            TrackAsset track = timelineAsset.GetOutputTrack(0);

其中director,即为我们要操作的PlayableDirector对象
Unity timeline动态绑定clip的值_第1张图片
2.通过track获取clip,并绑定值

代码
clip的获取似乎只有GetClips这个方法获取迭代类型,可以根据需要转为list

	foreach (TimelineClip clip in track.GetClips())
            {
     
                CinemachineShot shot = clip.asset as CinemachineShot;
                director.SetReferenceValue(shot.VirtualCamera.exposedName, startCam);
            }

如果不知道要设置的PlayableAsset类型,看这个图
Unity timeline动态绑定clip的值_第2张图片
完整代码

  public class DynamicTimelineBinding : MonoBehaviour
    {
     
        public PlayableDirector director;
        public TimelineAsset timelineAsset;
        public CinemachineVirtualCamera startCam;

        // Use this for initialization
        private void Start()
        {
     
                BindTimelineTracks();
        }

        public void BindTimelineTracks()
        {
     
            timelineAsset = (TimelineAsset)director.playableAsset;
            TrackAsset track = timelineAsset.GetOutputTrack(0);//获取track
            foreach (TimelineClip clip in track.GetClips())
            {
     
                CinemachineShot shot = clip.asset as CinemachineShot;
                director.SetReferenceValue(shot.VirtualCamera.exposedName, startCam);
                //由于只需要设置第一个的值,所以直接退出
                break;
            }
        }
    }

你可能感兴趣的:(Unity,timeline,cinemachine)