void OnEnable()
    {
        EditorApplication.playmodeStateChanged += SerializeProcess;

        // Initialize sort data.
        _layerList = new List<SortingLayerInfo>();

        // Initialize GUI data.
        
        _isFocus = false;

        if (_showSortingLayerContent == null)
        {
            _showSortingLayerContent = new Dictionary<string, bool>();
            if (_showSortingLayerContentName.Length > 0)
            {
                for (int index = 0; index < _showSortingLayerContentName.Length; index++)
                    _showSortingLayerContent[_showSortingLayerContentName[index]] = _showSortingLayerContentBoolean[index];
            }
        }

        if (_selectRenderer == null)
        {
            _selectRenderer = new HashSet<Renderer>();
            if (_selectRendererArray.Length > 0)
            {
                for (int index = 0; index < _selectRendererArray.Length; index++)
                    _selectRenderer.Add(_selectRendererArray[index]);
            }
        }

        _isDragRight = false;
        _isDragLeft = false;
        _focusState = FocusState.None;
        _originMousePos = Vector2.zero;
        _originShiftPos = 0;
        _originOrder = 0;

        _guiTime = 0;
        _keyDampState = KeyBoardDamp.None;

        _warnContent = new GUIContent(TextureResources.warnIcon, "Unknowable order in same value.");
    }
    /// <summary>
    /// Process the keyboard events.
    /// </summary>
    void KeyBoardProcess()
    {
        if (_focusSelectRenderer == null)
            return;

        if (Event.current.type == EventType.KeyDown)
        {
            if (Event.current.keyCode == KeyCode.UpArrow)
            {
                _editSelectRenderer = null;
                if (_keyDampState == KeyBoardDamp.None)
                {
                    SortingRendererInfo rendererInfo = GetLastRendererInfo(_focusSelectRenderer);
                    if (rendererInfo != null)
                    {
                        if (Event.current.control || Event.current.shift)
                        {
                            if (!_selectRenderer.Contains(rendererInfo.renderer))
                                _selectRenderer.Add(rendererInfo.renderer);
                            else
                                _selectRenderer.Remove(_focusSelectRenderer);
                        }
                        else
                        {
                            _selectRenderer.Clear();
                            _selectRenderer.Add(rendererInfo.renderer);
                        }
                        Repaint();
                        _focusSelectRenderer = rendererInfo.renderer;
                        GUIUtility.hotControl = rendererInfo.controlID;
                        GUIUtility.keyboardControl = 0;

                        _keyDampState = KeyBoardDamp.Damp;
                        _guiTime = Time.realtimeSinceStartup;
                        ChangeSelectObject();
                    }
                }
                else if (_keyDampState == KeyBoardDamp.Damp)
                {
                    if (Time.realtimeSinceStartup - _guiTime >= 0.5f)
                    {
                        _keyDampState = KeyBoardDamp.Continuous;
                        _guiTime = Time.realtimeSinceStartup;
                    }
                }
                else if (_keyDampState == KeyBoardDamp.Continuous)
                {
                    if (Time.realtimeSinceStartup - _guiTime >= 0.05f)
                    {
                        SortingRendererInfo rendererInfo = GetLastRendererInfo(_focusSelectRenderer);
                        if (rendererInfo != null)
                        {
                            if (Event.current.control || Event.current.shift)
                            {
                                if (!_selectRenderer.Contains(rendererInfo.renderer))
                                    _selectRenderer.Add(rendererInfo.renderer);
                                else
                                    _selectRenderer.Remove(_focusSelectRenderer);
                            }
                            else
                            {
                                _selectRenderer.Clear();
                                _selectRenderer.Add(rendererInfo.renderer);
                            }
                            Repaint();
                            _focusSelectRenderer = rendererInfo.renderer;
                            GUIUtility.hotControl = rendererInfo.controlID;
                            GUIUtility.keyboardControl = 0;

                            _guiTime = Time.realtimeSinceStartup;
                            ChangeSelectObject();
                        }
                    }
                }
                Event.current.Use();
            }
            else if (Event.current.keyCode == KeyCode.DownArrow)
            {
                _editSelectRenderer = null;
                if (_keyDampState == KeyBoardDamp.None)
                {
                    SortingRendererInfo rendererInfo = GetNextRendererInfo(_focusSelectRenderer);
                    if (rendererInfo != null)
                    {
                        if (Event.current.control || Event.current.shift)
                        {
                            if (!_selectRenderer.Contains(rendererInfo.renderer))
                                _selectRenderer.Add(rendererInfo.renderer);
                            else
                                _selectRenderer.Remove(_focusSelectRenderer);
                        }
                        else
                        {
                            _selectRenderer.Clear();
                            _selectRenderer.Add(rendererInfo.renderer);
                        }
                        Repaint();
                        _focusSelectRenderer = rendererInfo.renderer;
                        GUIUtility.hotControl = rendererInfo.controlID;
                        GUIUtility.keyboardControl = 0;

                        _keyDampState = KeyBoardDamp.Damp;
                        _guiTime = Time.realtimeSinceStartup;
                        ChangeSelectObject();
                    }
                }
                else if (_keyDampState == KeyBoardDamp.Damp)
                {
                    if (Time.realtimeSinceStartup - _guiTime >= 0.5f)
                    {
                        _keyDampState = KeyBoardDamp.Continuous;
                        _guiTime = Time.realtimeSinceStartup;
                    }
                }
                else if (_keyDampState == KeyBoardDamp.Continuous)
                {
                    if (Time.realtimeSinceStartup - _guiTime >= 0.05f)
                    {
                        SortingRendererInfo rendererInfo = GetNextRendererInfo(_focusSelectRenderer);
                        if (rendererInfo != null)
                        {
                            if (Event.current.control || Event.current.shift)
                            {
                                if (!_selectRenderer.Contains(rendererInfo.renderer))
                                    _selectRenderer.Add(rendererInfo.renderer);
                                else
                                    _selectRenderer.Remove(_focusSelectRenderer);
                            }
                            else
                            {
                                _selectRenderer.Clear();
                                _selectRenderer.Add(rendererInfo.renderer);
                            }
                            Repaint();
                            _focusSelectRenderer = rendererInfo.renderer;
                            GUIUtility.hotControl = rendererInfo.controlID;
                            GUIUtility.keyboardControl = 0;

                            _guiTime = Time.realtimeSinceStartup;
                            ChangeSelectObject();
                        }
                    }
                }
                Event.current.Use();
            }
        }
        else if (Event.current.type == EventType.KeyUp)
        {
            _guiTime = 0;
            _keyDampState = KeyBoardDamp.None;
            GUIUtility.hotControl = 0;
        }
    }