Esempio n. 1
0
    private static void OnScene(SceneView sceneview)
    {
        var currentEvent = Event.current;

        if (currentEvent.GetTypeForControl(EditorGUIUtility.GetControlID(FocusType.Passive)) == EventType.keyDown)
        {
            if (currentEvent.keyCode == KeyCode.Space)
            {
                if (ShowContextMenu())
                {
                    currentEvent.Use();
                }
            }
        }

        GameObject[] gameObjects = FindObjectsOfType <GameObject>();

        foreach (GameObject go in gameObjects)
        {
            if (PrefabUtility.GetPrefabType(go) == PrefabType.Prefab)
            {
                continue;
            }

            foreach (MonoBehaviour mb in go.GetComponents <MonoBehaviour>())
            {
                ISceneGUI sceneGui = mb as ISceneGUI;

                if (sceneGui != null)
                {
                    sceneGui.OnSceneGUI();
                }
            }
        }
    }
        protected virtual void OnSceneGUI(SceneView _sceneView)
        {
            if (Playable == null)
            {
                return;
            }

#if UNITY_2018_1_OR_NEWER
            TimelineLiteAsset inspectedAsset = TimelineEditor.inspectedAsset as TimelineLiteAsset;
#else
            TimelineLiteAsset inspectedAsset = UnityEditor.Timeline.TimelineEditor.timelineAsset as TimelineLiteAsset;
#endif
            if (inspectedAsset == null)
            {
                return;
            }

            // 始终调用
            foreach (var trackAsset in inspectedAsset.GetOutputTracks())
            {
                TLBasicTrackAsset basicTrackAsset = trackAsset as TLBasicTrackAsset;
                if (basicTrackAsset == null)
                {
                    continue;
                }
                foreach (var timelineClip in basicTrackAsset.GetClips())
                {
                    ISceneGUI asset = timelineClip.asset as ISceneGUI;
                    if (asset != null)
                    {
                        asset.SceneGUI(Playable, timelineClip, indicatorFrame);
                    }
                }
            }

#if UNITY_2019_1_OR_NEWER
            // 只有选中后调用
            foreach (var timelineClip in TimelineEditor.selectedClips)
            {
                ISceneGUI asset = timelineClip.asset as ISceneGUI;
                if (asset != null)
                {
                    asset.SceneGUISelected(Playable, timelineClip, indicatorFrame);
                }
            }
#endif
        }