1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- using UnityEngine;
- using UnityEngine.Playables;
- using UnityEngine.Timeline;
-
- namespace UnityEditor.Timeline
- {
- partial class TimelineWindow
- {
- [SerializeField]
- SequencePath m_SequencePath;
-
- void OnSelectionChange()
- {
- //Sanitize the inline curve selection
- SelectionManager.GetCurrentInlineEditorCurve()?.ValidateCurvesSelection();
-
- RefreshSelection(false);
- }
-
- void RefreshSelection(bool forceRebuild)
- {
- // if we're in Locked mode, keep current selection - don't use locked property because the
- // sequence hierarchy may need to be rebuilt and it assumes no asset == unlocked
- if (m_LockTracker.isLocked || (state != null && state.recording))
- {
- RestoreLastSelection(forceRebuild);
- return;
- }
-
- // selection is a TimelineAsset
- Object selectedObject = Selection.activeObject as TimelineAsset;
- if (selectedObject != null)
- {
- SetCurrentSelection(Selection.activeObject);
- return;
- }
-
- // selection is a GameObject, or a prefab with a director
- var selectedGO = Selection.activeGameObject;
- if (selectedGO != null)
- {
- bool isSceneObject = !PrefabUtility.IsPartOfPrefabAsset(selectedGO);
- bool hasDirector = selectedGO.GetComponent<PlayableDirector>() != null;
- if (isSceneObject || hasDirector)
- {
- SetCurrentSelection(selectedGO);
- return;
- }
- }
-
- //If not currently editing a Timeline and the selection is empty, clear selection
- if (Selection.activeObject == null &&
- state.IsEditingAnEmptyTimeline())
- {
- SetCurrentSelection(null);
- }
-
-
- // otherwise, keep the same selection.
- RestoreLastSelection(forceRebuild);
- }
-
- void RestoreLastSelection(bool forceRebuild)
- {
- state.SetCurrentSequencePath(m_SequencePath, forceRebuild);
-
- //case 1201405 and 1278598: unlock the window if there is no valid asset, since the lock button is disabled
- if (m_LockTracker.isLocked && state.editSequence.asset == null)
- m_LockTracker.isLocked = false;
- }
-
- void SetCurrentSelection(Object obj)
- {
- var selectedGameObject = obj as GameObject;
- if (selectedGameObject != null)
- {
- PlayableDirector director = TimelineUtility.GetDirectorComponentForGameObject(selectedGameObject);
- SetTimeline(director);
- }
- else
- {
- var selectedSequenceAsset = obj as TimelineAsset;
- if (selectedSequenceAsset != null)
- {
- SetTimeline(selectedSequenceAsset);
- }
- }
-
- Repaint();
- }
- }
- }
|