美文网首页
Unity UGUI系列五 Toggle ToggleGroup

Unity UGUI系列五 Toggle ToggleGroup

作者: 合肥黑 | 来源:发表于2021-11-22 15:09 被阅读0次
一、Toggle

参考
Unity 3D UGUI Toggle用法教程

image.png

Is On :用来表示Toggle当前开关状态,勾选为开;
Graphic :控制Toggle组件开关图片的显示隐藏,默认选取Checkmark,就是那个勾勾图片;

1.OnValueChange在UI上添加侦听
    public void ListenInFunction(bool isOn)
    {
        if (isOn)
        {
            Debug.Log("toggle ison");
        }
        else
        {
            Debug.Log("toggle isoff");
        }
    }

挂上这个脚本,会发现事件中有一个带参数的,还有一个不带参数的:


image.png

虽然ListenInFunction是带参数的,但是却要选上面那个绿色不带参数的,刚开始我是懵逼的…………

参照UGUI中Button和Toggle 添加动态事件得到了解释:

下方红线描出的为静态方法,功能类似上面讲述的为Button添加带参数回调事件一样,我们可以设定一个bool参数,这个参数不随Toggle的isOn变化
而上方绿线标出的不带参数的OnValueChange则为系统自动生成的动态事件,Toggle的isOn已经被封装到参数之中。

选下方红色的静态方法,其实UI中会多出一个checkbox,可以指定传入的参数:


image.png

当然也可以传入其它类型,比如

    public void ListenInFunctionArgs(int num)
    {
        Debug.Log("toggle args:" + num);
    }
image.png
2.OnValueChange代码上添加侦听
    public Toggle myToggle;

    void Start()
    {
        myToggle.onValueChanged.AddListener(isOn => print(isOn ? "开" : "关"));
    }
二、ToggleGroup

参考
Unity UGUI入门组件整理(三)【Toggle组件与Toggle Group组件】

image.png
    public Toggle[] toggles;
    void Start()
    {
        //myToggle.onValueChanged.AddListener(isOn => print(isOn ? "开" : "关"));
        toggles = transform.GetComponentsInChildren<Toggle>();
        for (int i = 0; i < toggles.Length; i++)
        {
            Toggle toggle = toggles[i];
            toggle.onValueChanged.AddListener((bool value) => OnToggleClick(toggle, value));
        }
    }

    public void OnToggleClick(Toggle toggle, bool isSwitch)
    {
        Debug.Log("toogle group name:" + toggle.name + isSwitch);
    }

假如初始状态是Toggle3被勾选,当我点击Toggle1勾选时,打印如下:

toogle group name:toggle3False
toogle group name:toggle1True

这样就可以根据名字和选中状态来做逻辑处理了。

2.Allow Switch off

是否允许不打开任何开关?如果启用此设置,则按下当前打开的开关会将其关闭,因此没有任何开关处于打开状态。如果禁用此设置,则按下当前打开的开关将不改变该开关的状态。

这个说的有点绕,并且有些博客上还有种错误的说法,就是这个开关能允许Group多选。其实测试一下就知道了,在勾选Allow Switch off时,点击当前选中的Toggle,可以将当前Toggle改成未选择状态,此时整个Group中所有的Toggle都会处于未选择状态。而如果没勾选Allow Switch off,就达不到这个效果,会强迫你必须选一个。

在官方文档中,描述ToggleGroup叫开关组:

开关组不是可见的 UI 控件,而是一种修改一组开关的行为的方法。属于同一组的开关将受到约束,即一次只能打开其中一个开关:通过按下打开其中一个开关便会自动关闭其他开关。
当用户必须从互斥的一组选项进行选择时,便可使用开关组。常见示例包括选择玩家角色类型、速度设置(慢速、中速、快速等)、预设颜色和一周中的日期。在场景中可以同时有多个开关组对象,因此可以根据需要创建多个单独的组。
与其他 UI 元素不同,具有开关组 (Toggle Group) 组件的对象不必是画布对象的子项,但开关本身仍然是其子项。

3.ToggleGroup.ActiveToggles

UGUI学习笔记(五) ToggleGroup制作选择题单选框

        IEnumerable<Toggle> answersGroup = ToggleGroup.ActiveToggles();
        foreach (Toggle t in answersGroup)
        {//遍历这个存放Toggle的按钮组IEnumerable,此乃C#的一个枚举集合,一般直接用foreach遍历  
            if (t.isOn)//遍历到一个被选择的Toggle  
            {
                switch (t.name)//根据这个Toggle的name,我们给string sex赋予不同的值  
                {
                    case "Toggle0":
                        sex = "男";
                        break;
                    case "Toggle1":
                        sex = "女";
                        break;
                }
                break;//就没必要遍历下去了,后面已经可以预见到,都是没被选择的Toggle。  
            }
        }

相关文章

网友评论

      本文标题:Unity UGUI系列五 Toggle ToggleGroup

      本文链接:https://www.haomeiwen.com/subject/wwwuzltx.html