private static object RunOnTrackIEnumerableReturn(IEnumerable <TrackAsset> tracks, Func <TrackAsset, object> @Func, bool runOnGroupTracks) { foreach (TrackAsset track in tracks) { GroupTrack groupTrack = track as GroupTrack; object o; if (groupTrack != null) { if (runOnGroupTracks) { o = @Func.Invoke(track); if (o != null) { return(o); } } o = RunOnTrackIEnumerableReturn(groupTrack.GetChildTracks(), Func, runOnGroupTracks); if (o != null) { return(o); } } else { o = @Func.Invoke(track); if (o != null) { return(o); } } } return(null); }
public static void GetAllAnimationClipsRecursive(IEnumerable <TrackAsset> tracks, List <AnimationClip> allAnimationClips) { foreach (TrackAsset track in tracks) { GroupTrack groupTrack = track as GroupTrack; if (groupTrack != null) { GetAllAnimationClipsRecursive(groupTrack.GetChildTracks(), allAnimationClips); } else { AnimationClip infiniteAnimationClip = TimelineExtensions.GetAnimClipFromInfiniteOnly(track); if (infiniteAnimationClip != null) { allAnimationClips.Add(infiniteAnimationClip); } IEnumerable <TimelineClip> timelineClips = track.GetClips(); foreach (TimelineClip timelineClip in timelineClips) { AnimationClip animationClip = timelineClip.animationClip; if (animationClip != null) { allAnimationClips.Add(animationClip); } } } } }
private static TLTrackData GetTrack(TrackAsset trackAsset) { Type trackAssetType = trackAsset.GetType(); if (trackAssetType == typeof(GroupTrack)) { GroupTrack groupTrack = trackAsset as GroupTrack; TLGroupTrackData group = new TLGroupTrackData(); group.enabled = !trackAsset.muted; group.name = trackAsset.name; foreach (TrackAsset childTrack in groupTrack.GetChildTracks()) { TLTrackData track = GetTrack(childTrack); if (track != null) { group.ChildTracks.Add(track); } } if (group.ChildTracks.Count == 0) { return(null); } return(group); } else if (typeof(TLBasicTrackAsset).IsAssignableFrom(trackAssetType)) { TLBasicTrackAsset basicTrackAsset = trackAsset as TLBasicTrackAsset; // 创建Track对象 TLBasicTrackData basicTrackData = basicTrackAsset.CreateTrackData(); basicTrackData.enabled = !basicTrackAsset.muted; basicTrackData.name = basicTrackAsset.name; // 遍历Track的所有片段 foreach (TimelineClip clip in basicTrackAsset.GetClips()) { TLBasicClipAsset clipAsset = clip.asset as TLBasicClipAsset; TLActionData actionData = clipAsset.CreateActionData(); ActionBaseInfo actionBaseInfo = new ActionBaseInfo(); actionBaseInfo.name = clip.displayName; //actionBaseInfo.triggerOnSkip = clipAsset.TriggerOnSkip; actionBaseInfo.start = (int)clip.GetStartFrame(); actionBaseInfo.end = (int)clip.GetEndFrame(); actionBaseInfo.frameCount = (int)clip.GetFrameCount(); actionBaseInfo.startTime = (float)clip.start; actionBaseInfo.endTime = (float)clip.end; actionBaseInfo.duration = actionBaseInfo.endTime - actionBaseInfo.startTime; actionData.ActionBaseInfo = actionBaseInfo; // 获取类型片段,并添加到Track对象 basicTrackData.Clips.Add(actionData); } return(basicTrackData); } return(null); }
// 导出ExportGroupTrack private int ExportGroupTrack(GroupTrack groupTrack, JSONObject trackListArr, JSONObject clipListArr) { JSONObject trackJSON = GenerateBaseTrack(groupTrack, PlaybaleTrackTypeMap["GroupTrack"]); JSONObject childrenJSON = trackJSON.GetField("children"); IEnumerable <TrackAsset> trackAssetList = groupTrack.GetChildTracks(); List <int> indexList = ExportTrackList(trackAssetList, trackListArr, clipListArr); foreach (int index in indexList) { childrenJSON.Add(index); } return(ExportTrack(trackJSON, trackListArr)); }
public static void RunOnTrackIEnumerable(IEnumerable <TrackAsset> tracks, Action <TrackAsset> Action, bool runOnGroupTracks) { foreach (TrackAsset track in tracks) { GroupTrack groupTrack = track as GroupTrack; if (groupTrack != null) { if (runOnGroupTracks) { Action.Invoke(track); } RunOnTrackIEnumerable(groupTrack.GetChildTracks(), Action, runOnGroupTracks); } else { Action.Invoke(track); } } }