private void AddNewParticleState(JTimelineParticle line, JParticleTrack track, float time, string stateName)
        {
            // var clipData = ScriptableObject.CreateInstance<JParticleClipData>();
            JParticleClipData clipData = new JParticleClipData();

            clipData.TargetObject     = line.AffectedObject.gameObject;
            clipData.StartTime        = time;
            clipData.ParticleName     = stateName;
            clipData.EffectDuration   = line.GetEffectDuration(stateName); // ParticleSystemUtility.GetParticleDuration(stateName, line.AffectedObject.gameObject);
            clipData.PlaybackDuration = clipData.EffectDuration;
            clipData.Track            = track;
            track.AddClip(clipData);
            if (timelineClipRenderDataMap.ContainsKey(track))
            {
                var cachedData = ScriptableObject.CreateInstance <JClipRenderData>();
                cachedData.ClipData = clipData;
                timelineClipRenderDataMap[track].Add(cachedData);
            }
            else
            {
                var cachedData = ScriptableObject.CreateInstance <JClipRenderData>();
                cachedData.ClipData = clipData;
                List <JClipRenderData> list = new List <JClipRenderData>();
                list.Add(cachedData);
                timelineClipRenderDataMap.Add(track, list);
            }
        }