Unity UGUI Toggle监听onValueChanged
一直以为下面代码是监听toggle点击的。。。其实不是,他是用来监听 isOn 值的改变的,真的好坑。。
Toggle.onValueChanged.AddListener((bool value) => resultToggleChange(Toggle, value));
void resultToggleChange(Toggle toggle, bool value){}
这里Lambda表达式的bool value就是 isOn的值,如果改成直接回调方法会直观些:
void Awake(){//添加监听GetComponent<Toggle>().onValueChanged.AddListener(ResultToggleChange);}void Start(){//设置初始状态ResultToggleChange(GetComponent<Toggle>().isOn);}private void ResultToggleChange(bool value){if (value){//选中了的逻辑}}
脚本上添加监听
onValueChanged.AddListener(方法名或用Lambda表达式)
void Awake(){//添加监听GetComponent<Toggle>().onValueChanged.AddListener(OnValueChanged);}void Start(){//设置初始状态OnValueChanged(GetComponent<Toggle>().isOn);}private void OnValueChanged(bool value){if (value){//选中了的逻辑}}
或
GetComponent<Toggle>().onValueChanged.AddListener((bool value)=> {if (value){//选中了的逻辑}});
- 第一个坑是,容易忽略Toggle组件的onClick.AddListener()方法,只有在属性isOn有变化的时候才会触发这个AddListener()监听。明确的来说,这个坑点不算是坑,是自己没有理解到位这个方法的使用,这里主要容易踩坑的地方是,UI预制体默认勾选了其中一个Toggle的isOn,然后想默认打开某个界面UI的时候,刚好也想默认触发这个Toggle的监听方法:
private void Event()
{toggl1.onClick.AddListener(isOn => if(isOn) Fun());
}
public void Open()
{toggle1.isOn = true;//想默认触发toggle1监听的方法
}
最后的结果是:由于toggle1的isOn已经默认勾选了,再设置它的isOn值为true,因为isOn的值并没有发生变化,所以并不会触发监听的方法。我的解决办法是:
public void Open()
{toggle1.isOn = false;//先置为false;toggle2.isOn = false;//先置为false;toggle3.isOn = false;//先置为false;toggle1.isOn = true;//想默认触发toggle1监听的方法
}
- 第二个比较坑的点是,Toggle组件在父物体或者界面关闭隐藏之后,Toggle的属性isOn的值并不会被设置为false。这个情况很容易被忽视,当有上面那种情况,打开界面触发某个方法事件的时候,由于isOn的值并没有发生变化,所以也不会触发监听的事件。所以像这种情况,依然可以用上面的方法解决。
https://blog.csdn.net/qq_33795300/article/details/105771408
https://blog.csdn.net/yye4520/article/details/89205659
Unity UGUI Toggle监听onValueChanged相关推荐
- Unity ugui——toggle多选小坑
在开发过程中遇到了一个简单的问题,随手记一下 多个toggle中,单选一个 运行的时候发现那个勾可以取消,但是取消又没事件,所以做了下处理,只要勾上之后就禁用toggle,当勾选其它toggle的时候 ...
- Unity 之 UGUI Toggle组件介绍和简例
Unity 之 UGUI Toggle组件介绍和简例 复合组件Toggle的组成: Toggle:自身挂载Toggle组件,并且对有对子物体的引用. Background:就是个Image组件,用来当 ...
- Unity 基础 之 代码动态监听UI交互组件汇总
一,Button组件 按钮组件:可响应用户的点击并用于启动或确认操作. 1.1 组件介绍 属性: Interactible:此属性确定该组件是否接受输入.此属性设置为 false 时,交互被禁用,过渡 ...
- unity 监听文件夹更新,获取本地图片并显示
1.监听文件夹更新方法: 2.copy图片并粘贴,命名方式以当前时间命名 3.文件夹文件按创建时间排序 时间戳命名 局域网发送和接收图片(udp) Unity Unity与UDP协议字符串图片的发送和 ...
- Unity编辑器扩展——在Editor下动态添加监听事件
对于Unity下例如按钮这种我们可以为它的监听事件手动进行赋值 如果需要通过编辑器扩展来动态为这些监听事件赋值应该如何去实现呢? 首先需要确认的是这些监听事件必须要符合一定的规则才能添加上: 1.必须 ...
- 【Unity】监听编辑器聚焦/激活状态OnEditorFocus
Unity提供了大量监听Asset目录下资源变化/导入时的回调,只需写个类继承AssetPostprocessor,实现各种回调方法即可接收到消息.但是Asset目录之外的文件变化该如何监听呢? 配置 ...
- Unity中场景生命周期的监听: EditorSceneManager
本文分享Unity中场景生命周期的监听: EditorSceneManager 在Unity开发中, 有时我们需要在场景的某些生命周期时做一些特定的操作, 特别是在Editor模式下的一些工具代码. ...
- Unity学习笔记:监听函数有什么卵用?(似乎就是从一件事过渡到另一件事?)
Unity学习笔记:监听函数有什么卵用?(似乎就是从一件事过渡到另一件事?) 个人学习经验,仅供参考,欢迎各位码友批评指正. 做项目敲代码时,一直不是很理解监听函数是个什么玩意. 按我目前的理解,说白 ...
- Unity AVPro video 开始播放,播放完成事件监听
代码播放: 低版本的路径播放api 不是这个 2.2.4 AVPro Video - Core Edition (核心版) bool isOpening = mediaPlayer.OpenMedi ...
最新文章
- python3 _笨方法学Python_日记_DAY3
- Buuctf(pwn)[OGeek2019]babyrop
- Qt QWidget实现手势缩放和平移(一)
- Python 中的 while循环 和 for... in ...循环
- 买iphone不买android,为何宁可用4年前的苹果6s,也不买两三千的安卓呢?理由很真实...
- 用python实现一个密码生成程序_Python实现密码生成器
- php 检验类,php实现的简单检验登陆类
- 测试面试题,自动化测试与性能测试篇(附答案)
- Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一)
- 自动驾驶路径规划算法学习-RRT算法及matlab实现
- 大番薯本地模式怎么使用?大番薯u盘启动盘制作工具本地模式重装系统教程
- 什么是变量?变量的本质是什么?变量的生命周期和作用域
- SQL Server2019安装步骤(超详细 附下载链接)
- CMake mingw 编译glm
- 【MDCC专访】郑晔:用JavaScript征服物联网应用开发
- NBIOT模块学习总结
- PEEKABOO——测试随笔
- katalon等待时间、断言、setup teardown
- 多个微信账号同时登录怎么操作
- latex如何更改某一段落的字体_LaTeX基础四:字体字号设置