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);
        }
        public TimelineLiteObjectData Extract()
        {
            TimelineLiteObjectData timelineData = Activator.CreateInstance(TargetDataType) as TimelineLiteObjectData;

            timelineData.Loop       = loop;
            timelineData.FrameRate  = this.editorSettings.fps;
            timelineData.FrameCount = (int)this.GetFrameCount();

            foreach (var trackAsset in GetRootTracks())
            {
                if (!(trackAsset is GroupTrack) && trackAsset.isEmpty)
                {
                    continue;
                }
                TLTrackData trackData = GetTrack(trackAsset);
                if (trackData != null)
                {
                    timelineData.Tracks.Add(trackData);
                }
            }

            ExtractPostProcess(timelineData);
            return(timelineData);
        }