12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- using System;
- using UnityEngine;
- using UnityEngine.Timeline;
- using UnityEngine.Playables;
- namespace UnityEngine.Timeline
- {
- /// <summary>
- /// Extension methods for TrackAssets
- /// </summary>
- public static class TrackAssetExtensions
- {
- /// <summary>
- /// Gets the GroupTrack this track belongs to.
- /// </summary>
- /// <param name="asset">The track asset to find the group of</param>
- /// <returns>The parent GroupTrack or null if the Track is an override track, or root track.</returns>
- public static GroupTrack GetGroup(this TrackAsset asset)
- {
- if (asset == null)
- return null;
- return asset.parent as GroupTrack;
- }
- /// <summary>
- /// Assigns the track to the specified group track.
- /// </summary>
- /// <param name="asset">The track to assign.</param>
- /// <param name="group">The GroupTrack to assign the track to.</param>
- /// <remarks>
- /// Does not support assigning to a group in a different timeline.
- /// </remarks>
- public static void SetGroup(this TrackAsset asset, GroupTrack group)
- {
- const string undoString = "Reparent";
- if (asset == null || asset == group || asset.parent == group)
- return;
- if (group != null && asset.timelineAsset != group.timelineAsset)
- throw new InvalidOperationException("Cannot assign to a group in a different timeline");
- TimelineUndo.PushUndo(asset, undoString);
- var timeline = asset.timelineAsset;
- var parentTrack = asset.parent as TrackAsset;
- var parentTimeline = asset.parent as TimelineAsset;
- if (parentTrack != null || parentTimeline != null)
- {
- TimelineUndo.PushUndo(asset.parent, undoString);
- if (parentTimeline != null)
- {
- parentTimeline.RemoveTrack(asset);
- }
- else
- {
- parentTrack.RemoveSubTrack(asset);
- }
- }
- if (group == null)
- {
- TimelineUndo.PushUndo(timeline, undoString);
- asset.parent = asset.timelineAsset;
- timeline.AddTrackInternal(asset);
- }
- else
- {
- TimelineUndo.PushUndo(group, undoString);
- group.AddChild(asset);
- }
- }
- }
- }
|