/
TON618OFF
/
Unity-Project-RTU
Обзор
Документация
Войти
/
TON618OFF
/
Unity-Project-RTU
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Library/PackageCache/com.unity.timeline@1.7.6/Editor/Window/TimelineWindow_PreviewPlayMode.cs
84 строки
3 KB
TON618OFF
release
03 окт 2024, 22:20
03 окт 2024, 22:20
7c70e9f
Код
Авторство
О чём код?
using System; using UnityEngine; using UnityEngine.Playables; using UnityEngine.Timeline; namespace UnityEditor.Timeline { partial class TimelineWindow { void OnPreviewPlayModeChanged(bool isPlaying) { if (state != null && !state.ignorePreview && isPlaying) { PreparePreviewPlay(); EditorApplication.update += OnPreviewPlay; } else { EditorApplication.update -= OnPreviewPlay; } } void PreparePreviewPlay() { if (state == null || state.masterSequence.asset == null || state.masterSequence.director == null) return; if (state.playRangeEnabled && !state.isJogging) { EnsurePlayRangeIsRespected(); } } internal void OnPreviewPlay() { if (state == null || state.masterSequence.asset == null || state.masterSequence.director == null) return; var director = state.masterSequence.director; if (director.timeUpdateMode == DirectorUpdateMode.Manual) { Repaint(); return; } if (state.isJogging) { ApplyJog(); } else if (state.playRangeEnabled) { EnsurePlayRangeIsRespected(); } if (director.extrapolationMode == DirectorWrapMode.None && director.playableGraph.IsValid() && !state.playRangeEnabled && director.playableGraph.IsDone()) { //reset time if we hit the end of the timeline state.masterSequence.time = 0.0; state.Pause(); } Repaint(); AudioMixerWindow.RepaintAudioMixerWindow(); } void ApplyJog() { state.masterSequence.time = Math.Max(0.0, Math.Min(state.masterSequence.duration, state.masterSequence.time + state.playbackSpeed)); } void EnsurePlayRangeIsRespected() { var playRangeTime = state.playRange; var time = state.masterSequence.time; if (Math.Abs(time - playRangeTime.end) < TimeUtility.kFrameRateEpsilon || time > playRangeTime.end || time < playRangeTime.start) { state.masterSequence.time = playRangeTime.start; // case 1215926 : Special case to make the director mode to play if the wrap mode is None. // In that mode, the engine stop the graph before we can ensure play range is respected. if (!state.playing && state.masterSequence.director.extrapolationMode == DirectorWrapMode.None) state.Play(); } } } }