private void clear(LogType type)
    {
        DebugMessageList list = mLogMessages[type];

        foreach (DebugMessage message in list.Messages)
        {
            mAllLogMessages.RemoveMessage(message);
        }
        list.Clear();
    }
    private void Awake()
    {
        mScale.x = mScale.y = Screen.width / 960.0f;
        Vector2Int size = new Vector2Int(960, Mathf.RoundToInt(Screen.height / mScale.y));

        mScrollWidth      = size.x - mButtonSpace * 2;
        mScrollHeight     = size.y - mButtonSpace * 3 - mButtonHeight;
        mButtonWidth      = Mathf.FloorToInt((size.x - mButtonSpace * 7) / 4.0f);
        mClearPosition    = new Rect(size.x - mButtonHeight * 2 - mButtonSpace * 6, size.y - mButtonHeight + mButtonSpace, mButtonHeight * 2, mButtonHeight - mButtonSpace * 2);
        mClearAllPosition = new Rect(mClearPosition.x - mClearPosition.width - mButtonSpace, mClearPosition.y, mClearPosition.width, mClearPosition.height);

        mAllLogMessages = new DebugMessageList(LogType.Log, mGuiSkin.label.fontSize, 3.1f);
        mLogMessages.Add(LogType.Log, new DebugMessageList(LogType.Log, mGuiSkin.label.fontSize, 3.1f));
        mLogMessages.Add(LogType.Warning, new DebugMessageList(LogType.Warning, mGuiSkin.label.fontSize, 3.1f));
        mLogMessages.Add(LogType.Error, new DebugMessageList(LogType.Error, mGuiSkin.label.fontSize, 3.1f));
        sVisible = this.mVisibleOnAwake;
        if (sVisible)
        {
            mScrollPosition = new Vector2(.0f, float.MaxValue);
        }
    }
    private void OnGUI()
    {
        if (sVisible)
        {
            GUI.matrix = Matrix4x4.Scale(mScale);

            GUILayout.BeginVertical();
            GUILayout.Space(mButtonSpace);
            GUILayout.BeginHorizontal();
            GUILayout.Space(mButtonSpace);
            if (-1 == mCurrentType)
            {
                GUILayout.Box("All", mGuiSkin.box, GUILayout.Width(mButtonWidth), GUILayout.Height(mButtonHeight));
            }
            else if (GUILayout.Button("<size=24>All</size>", GUILayout.Width(mButtonWidth), GUILayout.Height(mButtonHeight)))
            {
                mCurrentType = -1;
            }
            GUILayout.Space(mButtonSpace);
            if ((int)LogType.Log == mCurrentType)
            {
                GUILayout.Box("Information", mGuiSkin.box, GUILayout.Width(mButtonWidth), GUILayout.Height(mButtonHeight));
            }
            else if (GUILayout.Button("<size=24>Information</size>", GUILayout.Width(mButtonWidth), GUILayout.Height(mButtonHeight)))
            {
                mCurrentType = (int)LogType.Log;
            }
            GUILayout.Space(mButtonSpace);
            if ((int)LogType.Warning == mCurrentType)
            {
                GUILayout.Box("Warning", mGuiSkin.box, GUILayout.Width(mButtonWidth), GUILayout.Height(mButtonHeight));
            }
            else if (GUILayout.Button("<size=24>Warning</size>", GUILayout.Width(mButtonWidth), GUILayout.Height(mButtonHeight)))
            {
                mCurrentType = (int)LogType.Warning;
            }
            GUILayout.Space(mButtonSpace);
            if ((int)LogType.Error == mCurrentType)
            {
                GUILayout.Box("Error", mGuiSkin.box, GUILayout.Width(mButtonWidth), GUILayout.Height(mButtonHeight));
            }
            else if (GUILayout.Button("<size=24>Error</size>", GUILayout.Width(mButtonWidth), GUILayout.Height(mButtonHeight)))
            {
                mCurrentType = (int)LogType.Error;
            }
            GUILayout.Space(mButtonSpace);
            GUILayout.EndHorizontal();
            GUILayout.Space(mButtonSpace);

            mScrollPosition = GUILayout.BeginScrollView(mScrollPosition, false, false, mGuiSkin.verticalScrollbar, mGuiSkin.verticalScrollbar, GUILayout.Width(mScrollWidth), GUILayout.Height(mScrollHeight));
            DebugMessageList list = -1 == mCurrentType ? mAllLogMessages : mLogMessages[(LogType)mCurrentType];
            foreach (DebugMessage message in list.Messages)
            {
                GUILayout.Label(message.message, mGuiSkin.label);
                if (!string.IsNullOrWhiteSpace(message.stackTraces))
                {
                    GUILayout.Label(message.stackTraces, mGuiSkin.label);
                }
            }

            GUILayout.EndScrollView();
            GUILayout.EndVertical();

            if (GUI.Button(mClearAllPosition, "<size=18>ClearAll</size>"))
            {
                this.clearAll();
            }
            if (GUI.Button(mClearPosition, "<size=18>Clear</size>"))
            {
                if (-1 == mCurrentType)
                {
                    this.clearAll();
                }
                else
                {
                    this.clear((LogType)mCurrentType);
                }
            }
        }
    }