关闭

【Unity】模仿GUILayout.SelectionGird绘制一组互斥的按钮

标签: unity互斥按钮GUILayout
607人阅读 评论(0) 收藏 举报
分类:
        /// <summary>
        /// 绘制一组互斥的按钮
        /// 模仿GUILayout.SelectionGird绘制一组互斥的按钮,
        /// 做了一点修改, 传入的string数组改为KeyValuePair<int, string>的数组,
        /// 返回的不再是button在这个组合中的位置,而是我们给定的id(KeyValue中的int)
        /// </summary>
        /// <param name="ActiveID"></param>
        /// <param name="toggleDes"></param>
        /// <param name="colCount">Colum Count</param>
        /// <param name="style">GUIStyle</param>
        /// <param name="options">params GUILayoutOption[]</param>
        /// <returns></returns>
        public static int MutexToggles(int ActiveID, IList<KeyValuePair<int, string>> toggleDes, int colCount = 1, GUIStyle style = null, params GUILayoutOption[] options)
        {
            style = style == null ? new GUIStyle("button") : style;

            int rowCount = Mathf.CeilToInt(((float)toggleDes.Count) / colCount);
            GUILayout.BeginVertical();
            for (int row = 1; row <= rowCount; row++)
            {
                GUILayout.BeginHorizontal();
                for (int col = 1; col <= colCount; col++)
                {
                    int index = (row - 1) * colCount + col - 1;

                    if (index >= toggleDes.Count)
                        break;
                    bool flag = GUILayout.Toggle(toggleDes[index].Key == ActiveID, toggleDes[index].Value, style, options);
                    if (flag != (toggleDes[index].Key == ActiveID))
                        return toggleDes[index].Key;

                }
                GUILayout.EndHorizontal();
            }
            GUILayout.EndVertical();

            return ActiveID;
        }
    }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:99223次
    • 积分:1729
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:15篇
    • 译文:8篇
    • 评论:10条
    文章分类
    最新评论