Пример #1
0
 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);
 }
Пример #2
0
        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));
        }
Пример #5
0
 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);
         }
     }
 }