/// <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); }
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); }