public override void Process(float sequenceTime, float playbackRate) { allClips.Clear(); for (int index = 0; index < TrajectoryTracks.Count; index++) { var track = TrajectoryTracks[index]; if (track.Enable) { for (int trackClipIndex = 0; trackClipIndex < track.TrackClips.Count; trackClipIndex++) { var trackClip = track.TrackClips[trackClipIndex]; allClips.Add(trackClip); } } } var totalDeltaTime = sequenceTime - previousTime; var absDeltaTime = Mathf.Abs(totalDeltaTime); var timelinePlayingInReverse = totalDeltaTime < 0.0f; var runningTime = SequenceUpdateRate; var runningTotalTime = previousTime + runningTime; if (timelinePlayingInReverse) { previousTime = 0.0f; Process(sequenceTime, playbackRate); } else { while (absDeltaTime > 0.0f) { cachedRunningClips.Clear(); for (int allClipIndex = 0; allClipIndex < allClips.Count; allClipIndex++) { var clip = allClips[allClipIndex]; if (JTrajectoryClipData.IsClipFinished(runningTotalTime, clip)) { for (int i = 0; i < clip.TrajectoryList.Length; i++) { if (clip.TrajectoryList[i]._active) { clip.TrajectoryList[i].Reset(); } } // if (clip.Trajectory._active) // { // clip.Trajectory.Reset(); // } } if (!JTrajectoryClipData.IsClipRunning(runningTotalTime, clip) && !clip.Looping) { continue; } cachedRunningClips.Add(clip); } cachedRunningClips.Sort((x, y) => x.StartTime.CompareTo(y.StartTime)); for (int runningClipIndex = 0; runningClipIndex < cachedRunningClips.Count; runningClipIndex++) { var clip = cachedRunningClips[runningClipIndex]; if (Restart) { if (clip.skillunit.launchType == JSkillUnit.LaunchType.SINGLELINE) { clip.TrajectoryList = SingleLineFacyory(clip); } if (clip.skillunit.launchType == JSkillUnit.LaunchType.MULLINE) { clip.TrajectoryList = MultiLineFacyory(clip); } Restart = false; } if (clip.TrajectoryList != null) { for (int i = 0; i < clip.TrajectoryList.Length; i++) { if (!clip.TrajectoryList[i]._active) { clip.TrajectoryList[i].Begin(); } clip.TrajectoryList[i].DoUpdate(Time.realtimeSinceStartup); } } } absDeltaTime -= SequenceUpdateRate; if (!Mathf.Approximately(absDeltaTime, Mathf.Epsilon) && absDeltaTime < SequenceUpdateRate) { runningTime = absDeltaTime; } runningTotalTime += runningTime; } } previousTime = sequenceTime; }