使用方法很容易,目的是为了实现在一组Toggle内只能勾选一个

1、创建空的GameObject然后绑上一个ToggleGroup,

2、创建一组Toggle,将所有Toggle的Group属性指向前面的ToggleGroup,到此完成工作

ToggleGroup内有个AllowSwitchOff选项:

勾选:则可以取消所有的勾选项

不勾选:则一定会存在有一个勾选项

内部源码(from uGUI-2018.2)

        private void SetToggleGroup(ToggleGroup newGroup, bool setMemberValue){ToggleGroup oldGroup = m_Group;// Sometimes IsActive returns false in OnDisable so don't check for it.// Rather remove the toggle too often than too little.if (m_Group != null)m_Group.UnregisterToggle(this);// At runtime the group variable should be set but not when calling this method from OnEnable or OnDisable.// That's why we use the setMemberValue parameter.if (setMemberValue)m_Group = newGroup;// Only register to the new group if this Toggle is active.if (newGroup != null && IsActive())newGroup.RegisterToggle(this);// If we are in a new group, and this toggle is on, notify group.// Note: Don't refer to m_Group here as it's not guaranteed to have been set.if (newGroup != null && newGroup != oldGroup && isOn && IsActive())newGroup.NotifyToggleOn(this);}

在设置Toggle的Group时,会将所有的Toggle注册到同一个ToggleGroup中,并通知开关方法NotifyToggleOn

        public void NotifyToggleOn(Toggle toggle){ValidateToggleIsInGroup(toggle);// disable all toggles in the groupfor (var i = 0; i < m_Toggles.Count; i++){if (m_Toggles[i] == toggle)continue;m_Toggles[i].isOn = false;}}

当点击其中一个Toggle的时候,会触发注册的OnPointerClick,主要是NotifyToggleOn和PlayEffect以及自定义的onValueChanged回调

        public virtual void OnPointerClick(PointerEventData eventData){if (eventData.button != PointerEventData.InputButton.Left)return;InternalToggle();}private void InternalToggle(){if (!IsActive() || !IsInteractable())return;isOn = !isOn;}public bool isOn{get { return m_IsOn; }set{Set(value);}}void Set(bool value){Set(value, true);}void Set(bool value, bool sendCallback){if (m_IsOn == value)return;// if we are in a group and set to true, do group logicm_IsOn = value;if (m_Group != null && IsActive()){if (m_IsOn || (!m_Group.AnyTogglesOn() && !m_Group.allowSwitchOff)){m_IsOn = true;m_Group.NotifyToggleOn(this);}}// Always send event when toggle is clicked, even if value didn't change// due to already active toggle in a toggle group being clicked.// Controls like Dropdown rely on this.// It's up to the user to ignore a selection being set to the same value it already was, if desired.PlayEffect(toggleTransition == ToggleTransition.None);if (sendCallback){UISystemProfilerApi.AddMarker("Toggle.value", this);onValueChanged.Invoke(m_IsOn);}}

NotifyToggleOn上面已经贴出代码了,下面是PlayEffect,其实就是改变了graphic的透明度,做一个Tween动画

        private void PlayEffect(bool instant){if (graphic == null)return;#if UNITY_EDITORif (!Application.isPlaying)graphic.canvasRenderer.SetAlpha(m_IsOn ? 1f : 0f);else
#endifgraphic.CrossFadeAlpha(m_IsOn ? 1f : 0f, instant ? 0f : 0.1f, true);}

ToggleGroup的使用相关推荐

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

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

  2. Unity3d Ugui 10 Toggle ToggleGroup

    做单选或者多选使用 Interactable:点击是否有效 Transition:状态切换模式 None:没有切换效果 Color Tint:颜色切换模式 Target Graphic:默认显示的图片 ...

  3. unity toggle和togglegroup问题

    今天在用ugui做二级菜单的时候发现一个问题. 问题描述:有AB两组toggle,共用同一个togglegroup,当A或者B中任意一toggle的isOn=true时,setactive(false ...

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

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

  5. UGUI——ToggleGroup

    我的notion笔记 逻辑 直接继承自UIBehaviour 提供了RegisterToggle接口,Toggle组在SetToggleGroup中调用,将自身加入m_Toggles public v ...

  6. java 控件内布局_Java开发桌面程序学习(二)————fxml布局与控件学习

    JavaFx项目 新建完项目,我们的项目有三个文件 Main.java 程序入口类,载入界面并显示 Controller.java 事件处理,与fxml绑定 Sample.fxml 界面 sample ...

  7. Ext.widgets-Button,SplitButton,CycleButton

    Ext.Action action实现一个脱离了容器的事件,所有它可以在多个容器之间共享,不过好象只有Ext.Toolbar, Ext.Button 和 Ext.menu.Menu支持action接口 ...

  8. Cocos Creator学习目录

    目录 安装和启动 文件结构 编辑器基础 基本概念 (场景树 节点 坐标 组件 ) Cocos Creator 脚本简介 Cocos Creator调试 节点 cc.Node 组件开发cc.Compon ...

  9. 第二次数据库作业--gui

    第二次数据库作业--gui 1 package gui; 2 3 import action.C2SAction; 4 import action.CourseAction; 5 import act ...

最新文章

  1. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
  2. 数学建模大赛赛题解析:Mathorcup高校数学建模挑战赛-基于收得率预测模型的转炉炼钢的成本优化
  3. flask开发问题小记
  4. ubuntu10.4安装交叉编译器arm-none-linux-gnueabi-gcc
  5. python的md5
  6. SAP ABAP CDS view里的注解在ABAP后台是如何被解析的?
  7. php html 转xml,用PHP生成XML文档(转义字符)
  8. 关于JDK8采坑JCE加密限制版本问题
  9. 【Python】Python实战从入门到精通之二 -- 教你使用Python中列表操作
  10. 使用d3.v3插件绘制出svg图
  11. 错误集合_20220131
  12. ISA2006发布Exchange服务器 RPC OVER HTTPS
  13. Flink的容错机制
  14. Pygame教程系列二:MoviePy视频播放篇
  15. Mysql之注入工具-yellowcong
  16. The Plant Journal | DAP-seq助力揭示乌龙茶树杂种优势形成的分子机制
  17. 学习打卡 2020/2/4
  18. Docker 的数据持久化项目实战
  19. verilog中pullup和pulldown的用法
  20. 《黃帝內經》第一章《上古天真論》

热门文章

  1. 【页高速缓存】radix tree 源码解析
  2. 8. python 面向对象
  3. 遗传算法混流装配线平衡毕业论文【matlab/Flexsim仿真】
  4. NXP imx6ull GPIO简介
  5. tqdm介绍及常用方法
  6. Python中文件操作(IO流)及文件备份
  7. 弱监督语义分割--Weakly Supervised Semantic Segmentation using Web-Crawled Videos
  8. usb接口驱动_来晒一下自己的笔记本电脑,看接口够不够用,怎么样?
  9. 解决X-Shell 6强制更新的问题
  10. 多个业务子系统的集中统一管理用户权限,SQL脚本批量事务运行的参考代码