public virtual void OnEnable()
        {
            // Tags.
            m_Tags = serializedObject.FindProperty("tags");

            if (m_TagsList == null)
            {
                m_TagsList = new ReorderableList(serializedObject, m_Tags, false, false, true, true);
                m_TagsList.onAddDropdownCallback = NewElement;
                m_TagsList.onRemoveCallback      = RemoveFromTagsList;
                m_TagsList.drawElementCallback   = DrawTagListElement;
                m_TagsList.elementHeight         = EditorGUIUtility.singleLineHeight + 2;
                m_TagsList.headerHeight          = 3;
            }

            // Sorting layers.
            m_SortingLayers = serializedObject.FindProperty("m_SortingLayers");
            if (m_SortLayersList == null)
            {
                m_SortLayersList = new ReorderableList(serializedObject, m_SortingLayers, true, false, true, true);
                m_SortLayersList.onReorderCallback   = ReorderSortLayerList;
                m_SortLayersList.onAddCallback       = AddToSortLayerList;
                m_SortLayersList.onRemoveCallback    = RemoveFromSortLayerList;
                m_SortLayersList.onCanRemoveCallback = CanRemoveSortLayerEntry;
                m_SortLayersList.drawElementCallback = DrawSortLayerListElement;
                m_SortLayersList.elementHeight       = EditorGUIUtility.singleLineHeight + 2;
                m_SortLayersList.headerHeight        = 3;
            }
            // Layers.
            m_Layers = serializedObject.FindProperty("layers");
            System.Diagnostics.Debug.Assert(m_Layers.arraySize == 32);
            if (m_LayersList == null)
            {
                m_LayersList = new ReorderableList(serializedObject, m_Layers, false, false, false, false);
                m_LayersList.drawElementCallback = DrawLayerListElement;
                m_LayersList.elementHeight       = EditorGUIUtility.singleLineHeight + 2;
                m_LayersList.headerHeight        = 3;
            }

            if (s_InitialExpansionState != InitialExpansionState.None)
            {
                m_Tags.isExpanded          = false;
                m_SortingLayers.isExpanded = false;
                m_Layers.isExpanded        = false;
                switch (s_InitialExpansionState)
                {
                case InitialExpansionState.Tags:
                    m_Tags.isExpanded = true;
                    break;

                case InitialExpansionState.Layers:
                    m_Layers.isExpanded = true;
                    break;

                case InitialExpansionState.SortingLayers:
                    m_SortingLayers.isExpanded = true;
                    break;
                }
                s_InitialExpansionState = InitialExpansionState.None;
            }
        }
 internal static void ShowWithInitialExpansion(InitialExpansionState initialExpansionState)
 {
     s_InitialExpansionState = initialExpansionState;
     Selection.activeObject  = EditorApplication.tagManager;
 }