//---------------------------------------------------------------------------------------------------------------------- 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); } }
//---------------------------------------------------------------------------------------------------------------------- public void Execute() { //Only continue preloading images when we are not in play mode if (Application.isPlaying) { return; } Assert.IsNotNull(m_mixer); var clipAssets = m_mixer.GetClipAssets(); bool needsRefresh = false; foreach (KeyValuePair <TimelineClip, StreamingImageSequencePlayableAsset> kv in clipAssets) { StreamingImageSequencePlayableAsset sisAsset = kv.Value; sisAsset.ContinuePreloadingImages(); if (sisAsset.UpdateTextureWithRequestedImage()) { needsRefresh = true; } } if (needsRefresh) { TimelineEditor.Refresh(RefreshReason.ContentsModified); } }
//---------------------------------------------------------------------------------------------------------------------- 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); }