/// <summary>
        /// 注册一个DbgGUI
        /// </summary>
        /// <param name="name"></param>
        /// <param name="handler"></param>
        /// <param name="permission">默认是需要管理员权限的</param>
        public static void AddDbgGUI(string name, Action handler, string permission = Permission_Admin)
        {
            if (ms_MapDbgGUI.ContainsKey(name))
            {
                DbgGUIProxy proxy = ms_MapDbgGUI[name];
                proxy.handler    = handler;
                proxy.permission = permission;
            }
            else
            {
                DbgGUIProxy proxy = new DbgGUIProxy();
                proxy.name       = name;
                proxy.permission = permission;
                proxy.handler    = handler;
                ms_MapDbgGUI.Add(name, proxy);

                if (name == ms_SelectedGUI && EnableSelectedFirst)
                {
                    ms_ListDbgGUI.Insert(0, proxy);
                }
                else
                {
                    ms_ListDbgGUI.Add(proxy);
                }
            }
        }
        public static void RemoveDbgGUI(string name)
        {
            if (ms_MapDbgGUI.ContainsKey(name))
            {
                if (ms_SelectedGUI == name)
                {
                    ms_SelectedGUI = null;
                }

                DbgGUIProxy proxy = ms_MapDbgGUI[name];
                ms_ListDbgGUI.Remove(proxy);

                ms_MapDbgGUI.Remove(name);
            }
        }
        private void OnGUI_CmdGUI()
        {
            Rect rtCmdGUI = new Rect();

            rtCmdGUI.x     += m_BaseSize * 3 + 2;
            rtCmdGUI.y     += (m_BaseSize + 4);
            rtCmdGUI.width  = WinRect.width - (m_BaseSize * 3 + 2) - 2;
            rtCmdGUI.height = WinRect.height - (m_BaseSize + 4) - 2;

            GUILayout.BeginArea(rtCmdGUI);
            {
                Vector2 drag = getDrag();

                if (drag.y != 0 && rtCmdGUI.Contains(new Vector2(downPos.x - WinRect.x, Screen.height - downPos.y - WinRect.y)))
                {
                    m_ScrollPosition_CmdGUI.y += (drag.y - m_OldDrag_CmdGUI);
                }
                m_ScrollPosition_CmdGUI = GUILayout.BeginScrollView(m_ScrollPosition_CmdGUI);
                {
                    m_OldDrag_CmdGUI = drag.y;

                    if (ms_MapDbgGUI != null && ms_SelectedGUI != null)
                    {
                        if (ms_MapDbgGUI.ContainsKey(ms_SelectedGUI))
                        {
                            GUI.skin.button.fixedHeight = m_BaseSize;
                            GUI.skin.toggle.fixedHeight = m_BaseSize / 2;

                            DbgGUIProxy proxy   = ms_MapDbgGUI[ms_SelectedGUI];
                            Action      handler = proxy.handler;
                            handler();
                        }
                    }
                }
                GUILayout.EndScrollView();
            }
            GUILayout.EndArea();
        }
        private void OnGUI_CmdList()
        {
            Rect rtCmdList = new Rect();

            rtCmdList.x     += 2;
            rtCmdList.y     += (m_BaseSize + 4);
            rtCmdList.width  = m_BaseSize * 3 + 10;
            rtCmdList.height = WinRect.height - (m_BaseSize + 4) - 2;
            GUILayout.BeginArea(rtCmdList);
            {
                Vector2 drag = getDrag();
                if (drag.y != 0 && rtCmdList.Contains(new Vector2(downPos.x - WinRect.x, Screen.height - downPos.y - WinRect.y)))
                {
                    m_ScrollPosition_CmdList.y += (drag.y - m_OldDrag_CmdList);
                }

                m_ScrollPosition_CmdList = GUILayout.BeginScrollView(m_ScrollPosition_CmdList);
                {
                    m_OldDrag_CmdList = drag.y;

                    GUILayout.BeginVertical();
                    {
                        bool        isSelectChanged = false;
                        DbgGUIProxy newSelectProxy  = null;
                        for (int i = 0; i < ms_ListDbgGUI.Count; i++)
                        {
                            DbgGUIProxy proxy = ms_ListDbgGUI[i];
                            if (m_Permission.IndexOf(Permission_Admin) >= 0 || m_Permission.IndexOf(proxy.permission) >= 0)
                            {
                                if (ms_SelectedGUI != proxy.name)
                                {
                                    if (GUILayout.Button(proxy.name, GUILayout.Width(m_BaseSize * 3 - 5), GUILayout.Height(m_BaseSize)))
                                    {
                                        ms_SelectedGUI  = proxy.name;
                                        isSelectChanged = true;
                                        newSelectProxy  = proxy;
                                    }
                                }
                                else
                                {
                                    GUI.skin.box.alignment = TextAnchor.MiddleCenter;
                                    Color oldColor = GUI.color;
                                    GUI.color = Color.red;
                                    GUILayout.Box(proxy.name, GUILayout.Width(m_BaseSize * 3 - 5), GUILayout.Height(m_BaseSize));
                                    GUI.color = oldColor;
                                }
                            }
                        }

                        if (isSelectChanged)
                        {
                            PlayerPrefs.SetString(PrefsKey_SelectedGUI, ms_SelectedGUI);
                            if (EnableSelectedFirst)
                            {
                                ms_ListDbgGUI.Remove(newSelectProxy);
                                ms_ListDbgGUI.Insert(0, newSelectProxy);
                            }
                        }
                    }
                    GUILayout.EndVertical();
                }
                GUILayout.EndScrollView();
            }
            GUILayout.EndArea();
        }