static UnitySceneMemoHierarchyView()
        {
            if (!UnityEditorMemoPrefs.UnitySceneMemoActive)
            {
                return;
            }

            UnitySceneMemoHelper.Initialize();
            if (UnitySceneMemoHelper.Data == null)
            {
                return;
            }

            EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyView;

            Undo.undoRedoPerformed += () => {
                EditorApplication.RepaintHierarchyWindow();
                for (int i = 0; i < EditorSceneManager.sceneCount; i++)
                {
                    UnitySceneMemoHelper.InitializeSceneMemo(EditorSceneManager.GetSceneAt(i));
                }
            };

#if UNITY_2019_1_OR_NEWER
            SceneView.duringSceneGui += (view) => {
                UnitySceneMemoSceneView.OnGUI(currentMemo);
            };
#else
            // draw at SceneView
            SceneView.onSceneGUIDelegate += (view) => {
                UnitySceneMemoSceneView.OnGUI(currentMemo);
            };
#endif
        }
        static UnitySceneMemoHierarchyView()
        {
            if (!UnityEditorMemoPrefs.UnitySceneMemoActive)
            {
                return;
            }

            UnitySceneMemoHelper.Initialize();
            if (UnitySceneMemoHelper.Data == null)
            {
                return;
            }

            EditorApplication.hierarchyWindowItemOnGUI += OnGUI;
            Undo.undoRedoPerformed += () => {
                EditorApplication.RepaintHierarchyWindow();
                for (int i = 0; i < EditorSceneManager.sceneCount; i++)
                {
                    UnitySceneMemoHelper.InitializeSceneMemo(EditorSceneManager.GetSceneAt(i));
                }
            };
            SceneView.onSceneGUIDelegate += (view) => {
                UnitySceneMemoSceneView.DrawMemo(currentMemo);
            };
        }