前言
- 大家玩游戏的时候 总是会遇到单选功能、多选功能以及全选功能,那这些是怎么实现的呢,其实不难,接下来就用很简单的图文结合说明一下
单选功能的实现
1、首先创建三个Toggle挂载在GameObject父物体下 2、然后为父物体GameObject添加组件ToogleGroup,并且将三个子物体toogle组件中的Group设置为父物体 3、取消勾选其中两个toogle子物体的isOn(默认勾选),这样就实现了单选,看下效果多选以及全选功能的实现
1、首先创建四个toogle,将第一个toogle的Label改为总开关便于区分2、接下来我们不再使用toogleGroup组件,因为默认组件无法实现这个功能,需要一些简单的代码就可以搞定这个事情
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ToggleTotal : MonoBehaviour
{
public enum ToggleState
{
All, //全部打开
PART,//部分开启
None,//全部关闭
}
public Toggle toggleTotal;//总开关
public Toggle[] toggleList;//子开关
private ToggleState toggleState = ToggleState.PART; //当前开关的状态
// Start is called before the first frame update
void Start()
{
//当前被打开的开关数量
int toggleIsOnNumer = 0;
//总开关的开关逻辑
toggleTotal.onValueChanged.AddListener((bool isOn) =>
{
if (isOn)
{
//开启总开关,则全部子开关默认打开
toggleState = ToggleState.All;
AllToggleState(isOn);
}
else
{
//关闭总开关,则全部子开关关闭,但触发前提是总开关打开的情况下(因为有总开关关闭,子开关部分开启的时候,这个时候初始化会执行一次这里,就不能让子开关全部关闭)
if(toggleState == ToggleState.All)
{
toggleState = ToggleState.None;
AllToggleState(isOn);
}
}
}
);
//子开关的开关逻辑
foreach (Toggle toggles in toggleList)
{
toggles.onValueChanged.AddListener((bool isOn) =>
{
//子开关有变化就先设置状态为 部分打开
toggleState = ToggleState.PART;
if (isOn)
{
//有开关打开,被打开的开关数量加一,如果子开关全部开启,那么启动总开关
toggleIsOnNumer += 1;
if (toggleIsOnNumer == toggleList.Length)
{
toggleState = ToggleState.All;
toggleTotal.isOn = true;
}
}
else
{
//有开关关闭,被打开的开关数量减一,总开关会关闭,如果子开关全部关闭,设置开关状态
toggleIsOnNumer -= 1;
toggleTotal.isOn = false;
if (toggleIsOnNumer == 0)
{
toggleState = ToggleState.None;
}
}
//TODO 正式项目中必须将toggleIsOnNumer进行本地存储
}
);
}
}
/// <summary>
/// 所有开关都打开或者都关闭
/// </summary>
public void AllToggleState(bool isOn)
{
foreach (Toggle toggles in toggleList)
{
toggles.isOn = isOn;
}
}
}
是不是感觉很简单讷,注释很全的哦!
注意:正式项目中必须将toggleIsOnNumer进行本地存储
结语
本文用一个脚本和四个开关组件实现了对应的功能,内容偏基础一些,算是对自己的学习一点积累,大家有疑问也可以私信交流哦,感谢观看
搜索词缀
Unity单选、Unity多选、Unity全选、Unity的Toggle组件
网友评论