Exemplo n.º 1
0
        public static List <Object> CloneTrack(this PlayableDirector self, PlayableDirector dest, string trackName)
        {
            List <Object> toRemoveList        = new List <Object>();
            TimelineAsset sourceTimelineAsset = (TimelineAsset)self.playableAsset;
            TimelineAsset cloneTimelineAsset  = sourceTimelineAsset.CloneTrackAsset(trackName);

            dest.playableAsset = cloneTimelineAsset;
            toRemoveList.Add(cloneTimelineAsset);
            Object sourceBinding = self.GetGenericBinding(sourceTimelineAsset.GetTrackAsset(trackName));

            if (sourceBinding != null)
            {
                Object clone_binding;
                if (sourceBinding is Component c)
                {
                    GameObject cloneBindingGameObject = Object.Instantiate(c.gameObject);
                    cloneBindingGameObject.transform.CopyFrom(c.transform);
                    clone_binding = cloneBindingGameObject.GetComponent(c.GetType());
                    toRemoveList.Add(cloneBindingGameObject);
                }
                else
                {
                    clone_binding = Object.Instantiate(sourceBinding);
                    toRemoveList.Add(clone_binding);
                }

                clone_binding.name = StringUtilCat.RoundBrackets(StringConst.String_clone) + sourceBinding.name;
                dest.SetGenericBinding(cloneTimelineAsset.GetTrackAsset(trackName), clone_binding);
            }

            return(toRemoveList);
        }