Unity-UGUI——通过代码给UI元素添加对应事件
来源:互联网 发布:深入理解大数据 编辑:程序博客网 时间:2024/05/17 06:06
一篇很基础但实用的笔记,希望能帮到新人顺便攒下点击率。
先从按钮说起
如何在脚本中给按钮指定单击事件
最初的时候,给按钮添加点击事件,我都是通过Button组件的面板进行的,
点一下加号,拖入一个脚本,然后指定是哪个public方法。
后来觉得这样太麻烦了,终于学会了在脚本里怎么写。
首先using UnityEngine.UI;
然后public Button btn1;这个btn_1就通过手动拖给脚本好了。
再然后在Start之类的方法里绑定处理方法
btn1.onClick.AddListener(Btn1ClickHandler);
BtnClickHandler就是一个正常的方法
/// <summary> /// 无参数的按钮事件 /// </summary> void Btn1ClickHandler() { Debug.Log("按钮1被点击了"); }这样就成功的给按钮1绑定了处理方法,点击之后会debug。
很遗憾这样写不能够传递参数,按钮的AddListener里只能跟一个没有参数的UnityAction。
但很多时候我们需要传递参数,比如说我们需要依据按钮的名字做一些对应处理。
那么,按钮的AddListener如何传递参数
这其实也贼简单
我们可以在addlistener里new 一个Unityaction,然后写个 lambda表达式
至于处理代码是直接在这里写完,还是将参数传递给一个有参数的方法,就随意了
btn2.onClick.AddListener(new UnityEngine.Events.UnityAction(() => { Btn2ClickHandle(btn2.name); }));Btn2ClickHandle
/// <summary> /// 有传参数的按钮事件 /// </summary> /// <param name="name"></param> void Btn2ClickHandle(string name) { Debug.Log(name+"被点击了,顺便调用了按钮1的事件"); btn1.onClick.Invoke(); }这里还写了一句btn1.onClick.Invoke();这句话可以模拟按钮1被单击。
这里提一下上面说的,按钮单击传按钮名作为参数,和模拟按钮被单击这两个东西可能会用在什么场景。
我能想到的中控(刚做这个的时候别人就告诉我这叫中控,其实我至今不知道中控是什么意思),就是那种一个pad一台pc(显示器可能是大屏幕),pad上按按钮,pc上响应的功能。
当pad上的按钮被按下,通过udp什么的将按钮名发送给pc,然后pc依据按钮名找到同名的按钮,执行绑定在按钮上的事件。这么一来,两边命令是一样的,而且可以分开了单独调试。
我只是顺便一提,可能大多数人都不需要做这种low逼项目,希望每个新人学有所成之后都能去做一些有意思的东西,而不是和现在的我一样。
记完了Button,记一下另一个比较常用的toggle。
toggle经常用在表单,还有一些其他的切换场景,比如,我在一组选项卡中选中某一个,画面上依据我选中的内容,给我显示一个对应的模型。
正常的toggle是独立的,一堆独立的toggle放在一起,你可以让他们全部被选中,也可以全部不被选中。
但如果将几个toggle设置为同一个togglegroup,那么这一组中,同时只能有一个被选中,就是所谓的“单选”。
在togglegroup对象上添加ToggleGroup组件
将底下的每一个toggle游戏对象的Toggle组件的togglegroup参数设置一下,拖过去就行
这么一来运行后就得到了一组能够单选的toggle,接下来我们绑定一下处理方法,跟按钮的不同之处在于它不在是onclick,并且addlistener里的unityaction需要传一个bool的参数,这个参数就是当前是否被选中
//Toggle public Transform toggleGroup; Toggle[] toggles;上面是定义变量
下面绑定监听,当这一组toggle的值变化,就会debug被选中的那一个
toggles = toggleGroup.GetComponentsInChildren<Toggle>(); foreach (var t in toggles) { t.onValueChanged.AddListener(new UnityEngine.Events.UnityAction<bool>((bool b) => { if (b) Debug.Log(t.name); })); }
想在代码中修改哪个哪个被选中,只要拿到它的toggle组件,然后设置isOn=true/false
最后记一个dropdown,就是这个下拉框
dropdown.onValueChanged.AddListener(new UnityEngine.Events.UnityAction<int>((int index)=> { Debug.Log(dropdown.options[index].text.ToString()); }));
这样就会在 切换之后打印出被选中项的文字
btn1.onClick.AddListener(Btn1ClickHandler);
阅读全文
0 0
- Unity-UGUI——通过代码给UI元素添加对应事件
- UGUI 控件通过代码添加事件
- Unity UGUI——UI基础,Canvas
- Unity UGUI按钮动态添加点击事件
- Unity UGUI 动态添加Button.OnClick()事件
- Unity用代码给按钮添加点击事件
- [Unity3D——用代码说明一切] UGUI:用代码添加事件监听
- JS动态给元素添加事件处理代码
- Unity UGUI——UI控件的鼠标快捷操作
- Unity +HTC VIVE 虚拟现实开发— UI设计(UGUI)
- 为UI元素添加事件
- Unity3D UGUI 代码添加 点击事件
- JS给元素添加事件
- unity之UGUI去掉UI事件拦截(穿透)
- Unity UGUI中按钮自动触发UI事件
- Unity—UGUI
- unity给ugui添加collider时让collider自适应
- 通过遍历子元素给每个子元素添加事件时的索引问题
- 树莓派GPS(USB转串口)获取经纬度
- 1179: 构造表达式
- jQueryTable DataTables
- 【影评】速度与激情8
- 剑指offer 面试题12 打印 1 到最大的 n 位整数
- Unity-UGUI——通过代码给UI元素添加对应事件
- matlab实现彩色图像特征提取1
- 如何在win7下面强制杀死tomcat
- 存储过程基础以及几种简单的实现
- Linux修改文件编码
- 洛谷【p1279】 dp
- 尼姆博弈
- java实现至少输入一个条件的数据库查询
- C++ STL之vector用法总结