需求
由于项目多相机切换timeline的需求,要给timeline动态赋值,实现从不同机位切换到固定机位的效果,国内技术网站没有找到能简洁实现的代码,所以自己记录一下实现的代码,方便需要的人
思路
1.通过PlayableDirector获取Track
代码
timelineAsset = (TimelineAsset)director.playableAsset;
TrackAsset track = timelineAsset.GetOutputTrack(0);
其中director,即为我们要操作的PlayableDirector对象
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类型,看这个图
完整代码
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;
}
}
}