//---------------------------------------------------------------------------------------------------------------------- private void ValidateClipDataCurves() { foreach (TimelineClip clip in GetClips()) { StreamingImageSequencePlayableAsset sisPlayableAsset = clip.asset as StreamingImageSequencePlayableAsset; Assert.IsNotNull(sisPlayableAsset); SISClipData clipData = sisPlayableAsset.GetBoundClipData(); Assert.IsNotNull(clipData); AnimationCurve curve = clipData.GetAnimationCurve(); if (null != curve) { continue; } #if UNITY_EDITOR EditorCurveBinding curveBinding = StreamingImageSequencePlayableAsset.GetTimeCurveBinding(); curve = AnimationUtility.GetEditorCurve(clip.curves, curveBinding); #else Debug.LogWarning("[SIS] ClipData does not have AnimationCurve. Need to resave track: " + name); curve = AnimationCurve.Linear(0f, 0f, (float)(clip.duration * clip.timeScale), 1f); #endif clipData.SetAnimationCurve(curve); } }
//---------------------------------------------------------------------------------------------------------------------- internal static float CalculateFPS(StreamingImageSequencePlayableAsset sisPlayableAsset) { double clipTimeScale = 1; SISClipData sisClipData = sisPlayableAsset.GetBoundClipData(); if (null == sisClipData) { return(0); } if (null != sisClipData.GetOwner()) { clipTimeScale = sisClipData.GetOwner().timeScale; } int numImages = sisPlayableAsset.GetNumImages(); float fps = (float)(numImages * clipTimeScale / sisClipData.CalculateCurveDuration()); return(fps); }
internal static void SetFPS(StreamingImageSequencePlayableAsset sisPlayableAsset, float newFPS) { SISClipData sisClipData = sisPlayableAsset.GetBoundClipData(); Assert.IsNotNull(sisClipData); TimelineClip clip = sisClipData.GetOwner(); Assert.IsNotNull(clip); int numImages = sisPlayableAsset.GetNumImages(); if (numImages <= 0) { Debug.LogWarning("[SIS] There are no images in folder: " + sisPlayableAsset.GetFolder()); return; } double prevTimeScale = clip.timeScale; float clipTimeScale = (newFPS * sisClipData.CalculateCurveDuration() / numImages); clip.timeScale = clipTimeScale; clip.duration = clip.duration * (prevTimeScale / clipTimeScale); }