今天在用ugui做二级菜单的时候发现一个问题。
问题描述:有AB两组toggle,共用同一个togglegroup,当A或者B中任意一toggle的isOn=true时,setactive(false)另外一组toggle。常理来讲,如果被false的那组toggle中包含isOn=true的toggle,togglegroup会给他关掉,但实际上并没有。

最后找到unity的一个帖子有一位网友提供了一个解决方法,做了一个扩展的toggle,下面是代码,最下面是帖子地址。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class ToggleEx : Toggle{private struct Group{public HashSet<ToggleEx> onToggles;public HashSet<ToggleEx> offToggles;}private static Dictionary<ToggleGroup, Group> __groups;private bool __isOn;private ToggleGroup __group;protected override void Awake(){base.Awake();__isOn = isOn;ToggleGroup group = base.group;if (group != null){__group = group;__Add();}if (onValueChanged == null)onValueChanged = new ToggleEvent();onValueChanged.AddListener(__Update);}protected override void OnEnable(){if (!__isOn && __group != null){Group group;if (__groups != null && __groups.TryGetValue(__group, out group) && group.onToggles != null){foreach (ToggleEx toggle in group.onToggles)__group.RegisterToggle(toggle);}}base.OnEnable();}protected override void OnDisable(){if (__isOn && __group != null){Group group;if (__groups != null && __groups.TryGetValue(__group, out group) && group.offToggles != null){foreach (ToggleEx toggle in group.offToggles)__group.UnregisterToggle(toggle);}}base.OnDisable();}protected override void OnDestroy(){__Remove();base.OnDestroy();}private void __Add(){if (__group == null)return;if (__groups == null)__groups = new Dictionary<ToggleGroup, Group>();Group group;__groups.TryGetValue(__group, out group);if (__isOn){if (group.onToggles == null)group.onToggles = new HashSet<ToggleEx>();group.onToggles.Add(this);__groups[__group] = group;}else{if (group.offToggles == null)group.offToggles = new HashSet<ToggleEx>();group.offToggles.Add(this);__groups[__group] = group;}}private void __Remove(){if (__group == null)return;if (__groups == null)__groups = new Dictionary<ToggleGroup, Group>();Group group;__groups.TryGetValue(__group, out group);if (__isOn){if (group.onToggles != null)group.onToggles.Remove(this);__groups[__group] = group;}else{if (group.offToggles != null)group.offToggles.Remove(this);__groups[__group] = group;}}private void __Update(bool value){__Remove();__isOn = value;__group = group;__Add();}}

帖子地址,点我访问

unity toggle和togglegroup问题相关推荐

  1. Unity Toggle组制作菜单及菜单栏移动和二级菜单实现!

    Unity - Toggle组制作菜单及菜单栏移动和二级菜单实现! 一:效果一 二:效果二 三:效果三 四:此Demo下载 ------> 本文提供详细教程 记录遇到的难点并帮助同行的朋友们 坚 ...

  2. UIGU源码分析6:Toggle 和 ToggleGroup

    源码6:Toggle 和 ToggleGroup Toggle public class Toggle : Selectable, IPointerClickHandler, ISubmitHandl ...

  3. UGUI源码分析:开关组件Toggle与ToggleGroup

    系列 UGUI源码分析系列总览 相关前置: UGUI EventSystem源码分析 UGUI源码分析:Selectable交互组件的基类 文章目录 系列 Toggle Toggle组件属性介绍 初始 ...

  4. 新版unity toggle组件汉化名字

    提一个新版unity的改变的点: 新版unity中如果使用汉化包,则toggle翻译为切换(???) 我被这玩意坑了十分钟,小心踩坑

  5. unity Toggle Groud

    Toggle 框 要建一个空物体加上Toggle Groud 组件,然后把Toggle 按钮的组选成该Groud.

  6. Unity Toggle组件踩坑使用笔记

    项目中需要用到排序功能,两种排序,一个型号,一个是评分,当用户点击型号或者评分的时候,物品列表中的物品需要重新排序,有点类似游戏中的背包,希望武器按照品质或者强化等级排序.最简单的方法是制作两个But ...

  7. Unity 各个系统

    一:Animator: 动画事件:写在text中,读写 动画名字+路径+动画时长+动画触发事件 动画:勾选此选项后,动画会跳抖动,动画一致播放,播放不完整.自己一直传递自己,一般此选项不勾选. 动画平 ...

  8. Unity多选题功能开发

    文章目录 前言 一.场景物体 二.脚本 总结 前言 新手一直不知道该怎么做一个多选题开发模块!对于文件流又不够熟悉,就只能在场景中做题目更换和分数统计. 提示:以下是本篇文章正文内容,下面案例可供参考 ...

  9. unity内置图片查看器

    原作者链接github #if UNITY_EDITORusing UnityEngine; using UnityEditor; using System.Collections.Generic; ...

最新文章

  1. MapInfo常见数据格式
  2. Caffe 训练时loss等于87.3365且保持不变的原因及解决方法
  3. 经典java程序员的面试题及答案
  4. 别小看不起眼的电阻,里面大有学问!
  5. linux查看登录服务器的ip历史记录,通过登陆IP记录Linux所有用户登录所操作日志的方法...
  6. 怎么样用 Python 玩转 Redis !过来 咱一起聊聊!
  7. delphi xe 10.4 开发 APP
  8. 计算机无法进入增值税认证平台,增值税认证勾选平台打不开怎么办
  9. 计算机一级试题库app,计算机一级题库app
  10. altium09怎么查元器件_Altium Designer中怎么查找元器件
  11. php判断信用卡,PHP函数验证信用卡卡号是否正确
  12. PDFlib-6.0.3p1-Windows] license key 算法分析
  13. XML文件约束之DTD详解
  14. Spring加载时报错处理
  15. 温暖的奢侈,当手机遇到机器人
  16. Pandas之十二速查手册
  17. 微信小程序云开发如何实现上传视频 以及 图片
  18. AP6212WIFI蓝牙模块移植过程
  19. python将汉字转为拼音字母_科学网—[转载]python中文汉字转拼音 - 陈明杰的博文...
  20. linux 汇编 读取软盘,学习x86汇编语言7 使用INT13读取软盘数据

热门文章

  1. SQL SERVER-开启xp_cmdshell
  2. linux红帽7修改时间,RedHat Linux 修改时区
  3. C++动态创建多维数组
  4. linux照片备份软件,照片视频备份软件下载-照片视频备份云相册安卓版v1.0.1-Linux公社...
  5. 停车场管理系统程序设计c语言数据结构,数据结构(C语言)—停车场管理系统...
  6. LeetCode 1240 铺瓷砖
  7. day04-乐优商城项目搭建
  8. 华为WATCH Buds耳机连接不稳定出现听歌卡顿或断音应该怎么办?
  9. read函数阻塞还是非阻塞
  10. 酷乐天气开发记录总结2