前言
- 大家玩游戲的時候 總是會遇到單選功能疫粥、多選功能以及全選功能茬斧,那這些是怎么實現(xiàn)的呢,其實不難梗逮,接下來就用很簡單的圖文結(jié)合說明一下
單選功能的實現(xiàn)
1项秉、首先創(chuàng)建三個Toggle掛載在GameObject父物體下多選以及全選功能的實現(xiàn)
1岁诉、首先創(chuàng)建四個toogle锚沸,將第一個toogle的Label改為總開關(guān)便于區(qū)分2、接下來我們不再使用toogleGroup組件涕癣,因為默認(rèn)組件無法實現(xiàn)這個功能哗蜈,需要一些簡單的代碼就可以搞定這個事情
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ToggleTotal : MonoBehaviour
{
public enum ToggleState
{
All, //全部打開
PART,//部分開啟
None,//全部關(guān)閉
}
public Toggle toggleTotal;//總開關(guān)
public Toggle[] toggleList;//子開關(guān)
private ToggleState toggleState = ToggleState.PART; //當(dāng)前開關(guān)的狀態(tài)
// Start is called before the first frame update
void Start()
{
//當(dāng)前被打開的開關(guān)數(shù)量
int toggleIsOnNumer = 0;
//總開關(guān)的開關(guān)邏輯
toggleTotal.onValueChanged.AddListener((bool isOn) =>
{
if (isOn)
{
//開啟總開關(guān),則全部子開關(guān)默認(rèn)打開
toggleState = ToggleState.All;
AllToggleState(isOn);
}
else
{
//關(guān)閉總開關(guān)属划,則全部子開關(guān)關(guān)閉恬叹,但觸發(fā)前提是總開關(guān)打開的情況下(因為有總開關(guān)關(guān)閉,子開關(guān)部分開啟的時候同眯,這個時候初始化會執(zhí)行一次這里绽昼,就不能讓子開關(guān)全部關(guān)閉)
if(toggleState == ToggleState.All)
{
toggleState = ToggleState.None;
AllToggleState(isOn);
}
}
}
);
//子開關(guān)的開關(guān)邏輯
foreach (Toggle toggles in toggleList)
{
toggles.onValueChanged.AddListener((bool isOn) =>
{
//子開關(guān)有變化就先設(shè)置狀態(tài)為 部分打開
toggleState = ToggleState.PART;
if (isOn)
{
//有開關(guān)打開,被打開的開關(guān)數(shù)量加一须蜗,如果子開關(guān)全部開啟硅确,那么啟動總開關(guān)
toggleIsOnNumer += 1;
if (toggleIsOnNumer == toggleList.Length)
{
toggleState = ToggleState.All;
toggleTotal.isOn = true;
}
}
else
{
//有開關(guān)關(guān)閉,被打開的開關(guān)數(shù)量減一明肮,總開關(guān)會關(guān)閉菱农,如果子開關(guān)全部關(guān)閉,設(shè)置開關(guān)狀態(tài)
toggleIsOnNumer -= 1;
toggleTotal.isOn = false;
if (toggleIsOnNumer == 0)
{
toggleState = ToggleState.None;
}
}
//TODO 正式項目中必須將toggleIsOnNumer進(jìn)行本地存儲
}
);
}
}
/// <summary>
/// 所有開關(guān)都打開或者都關(guān)閉
/// </summary>
public void AllToggleState(bool isOn)
{
foreach (Toggle toggles in toggleList)
{
toggles.isOn = isOn;
}
}
}
是不是感覺很簡單訥柿估,注釋很全的哦循未!
注意:正式項目中必須將toggleIsOnNumer進(jìn)行本地存儲
結(jié)語
本文用一個腳本和四個開關(guān)組件實現(xiàn)了對應(yīng)的功能秫舌,內(nèi)容偏基礎(chǔ)一些的妖,算是對自己的學(xué)習(xí)一點積累,大家有疑問也可以私信交流哦足陨,感謝觀看
搜索詞綴
Unity單選嫂粟、Unity多選、Unity全選墨缘、Unity的Toggle組件