123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- using UnityEngine;
- using UnityEngine.Playables;
- using UnityEngine.Timeline;
- namespace UnityEditor.Timeline
- {
- partial class TimelineWindow
- {
- [SerializeField]
- SequencePath m_SequencePath;
- private Object lastSelectedGO { get; set; }
- 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;
- }
- }
- // 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);
- SetCurrentTimeline(director);
- lastSelectedGO = selectedGameObject;
- }
- else
- {
- var selectedSequenceAsset = obj as TimelineAsset;
- if (selectedSequenceAsset != null)
- {
- SetCurrentTimeline(selectedSequenceAsset);
- lastSelectedGO = selectedGameObject;
- }
- }
- Repaint();
- }
- }
- }
|