/// <summary>
        /// Allows you to create a track and add it to the Timeline.
        /// </summary>
        /// <param name="type">The type of track to create. Must derive from TrackAsset.</param>
        /// <param name="parent">Track to parent to. This can be null.</param>
        /// <param name="name">Name to give the track.</param>
        /// <returns>The created track.</returns>
        /// <remarks>
        /// This method will throw an InvalidOperationException if the parent is not valid. The parent can be any GroupTrack, or a supported parent type of track. For example, this can be used to create override tracks in AnimationTracks.
        /// </remarks>
        public TrackAsset CreateTrack(Type type, TrackAsset parent, string name)
        {
            if (parent != null && parent.timelineAsset != this)
            {
                throw new InvalidOperationException("Addtrack cannot parent to a track not in the Timeline");
            }

            if (!typeof(TrackAsset).IsAssignableFrom(type))
            {
                throw new InvalidOperationException("Supplied type must be a track asset");
            }

            if (parent != null)
            {
                if (!TimelineCreateUtilities.ValidateParentTrack(parent, type))
                {
                    throw new InvalidOperationException("Cannot assign a child of type " + type.Name + " to a parent of type " + parent.GetType().Name);
                }
            }


            var actualParent = parent != null ? parent as PlayableAsset : this;

            TimelineUndo.PushUndo(actualParent, "Create Track");

            var baseName = name;

            if (string.IsNullOrEmpty(baseName))
            {
                baseName = type.Name;
#if UNITY_EDITOR
                baseName = UnityEditor.ObjectNames.NicifyVariableName(baseName);
#endif
            }

            var trackName = baseName;
            if (parent != null)
            {
                trackName = TimelineCreateUtilities.GenerateUniqueActorName(parent.subTracksObjects, baseName);
            }
            else
            {
                trackName = TimelineCreateUtilities.GenerateUniqueActorName(trackObjects, baseName);
            }

            TrackAsset newTrack = AllocateTrack(parent, trackName, type);
            if (newTrack != null)
            {
                newTrack.name = trackName;
                TimelineCreateUtilities.SaveAssetIntoObject(newTrack, actualParent);
            }
            return(newTrack);
        }
예제 #2
0
        public TrackAsset CreateTrack(Type type, TrackAsset parent, string name)
        {
            if (parent != null && parent.timelineAsset != this)
            {
                throw new InvalidOperationException("Addtrack cannot parent to a track not in the Timeline");
            }
            if (!typeof(TrackAsset).IsAssignableFrom(type))
            {
                throw new InvalidOperationException("Supplied type must be a track asset");
            }
            if (parent != null)
            {
                if (!TimelineCreateUtilities.ValidateParentTrack(parent, type))
                {
                    throw new InvalidOperationException("Cannot assign a child of type " + type.Name + "to a parent of type " + parent.GetType().Name);
                }
            }
            PlayableAsset masterAsset = (!(parent != null)) ? this : parent;
            string        text        = name;

            if (string.IsNullOrEmpty(text))
            {
                text = type.Name;
            }
            string text2;

            if (parent != null)
            {
                text2 = TimelineCreateUtilities.GenerateUniqueActorName(parent.subTracksObjects, text);
            }
            else
            {
                text2 = TimelineCreateUtilities.GenerateUniqueActorName(this.trackObjects, text);
            }
            TrackAsset trackAsset = this.AllocateTrack(parent, text2, type);

            if (trackAsset != null)
            {
                trackAsset.name = text2;
                TimelineCreateUtilities.SaveAssetIntoObject(trackAsset, masterAsset);
            }
            return(trackAsset);
        }