如下:有一组按钮,选中其中一个,会突出显示,并且做出相应的逻辑处理,如果使用toggleGroup实现的话,会有不可预知的bug,这是toggle本身的问题,我们只能使用按钮的方法实现,原理是:为每一个按钮创建一个图片子物体作为突出显示,当选中这个按钮的时候,选中按钮的图片子物体显示或者透明度设置为100%,其他按钮的图片子物体都设置为不可见。
void OrderSetBtnHandle()
{
for (int i = 0; i < _orderSetTransform.childCount; i++)
{
Transform curTransform = _orderSetTransform.GetChild(i);
curTransform.GetComponent<Button>().onClick.AddListener(() => { OrderState(curTransform.name); });
}
_orderContent.GetChild(0).gameObject.SetActive(false); //隐藏函数创建模板
}
void OrderState(string name)
{
for (int i = 0; i < _orderSetTransform.childCount; i++)
{
if (_orderSetTransform.GetChild(i).name.Equals(name))
{
_orderSetTransform.GetChild(i).GetChild(0).GetComponent<Image>().color = new Color(1f, 1f, 1f, 1f);
}
else
{
_orderSetTransform.GetChild(i).GetChild(0).GetComponent<Image>().color = new Color(1f, 1f, 1f, 0f);
}
}
if (name.Equals("Order_All"))
{
//第一个是函数创建模板,不显示
for (int i = 1; i < _orderContent.childCount; i++)
{
_orderContent.GetChild(i).gameObject.SetActive(true);
}
}
else
{
for (int i = 1; i < _orderContent.childCount; i++)
{
_orderContent.GetChild(i).gameObject
.SetActive((_orderContent.GetChild(i).name.Split('_')[0] + "_" +
_orderContent.GetChild(i).name.Split('_')[1]).Equals(name));
}
}
Utils.RefreshFitter();
}
更改后:
private void Start()
{
_menuGroupTrans = transform.Find("menuGroup");
SetMenuGroupBtnHandle();
OnBtnClick("buildtBtn");
}
void SetMenuGroupBtnHandle()
{
for (int i = 0; i < _menuGroupTrans.childCount; i++)
{
Transform curTransform = _menuGroupTrans.GetChild(i);
curTransform.GetComponent<Button>().onClick.AddListener(() => { OnBtnClick(curTransform.name); });
}
}
void OnBtnClick(string name)
{
for (int i = 0; i < _menuGroupTrans.childCount; i++)
{
if (_menuGroupTrans.GetChild(i).name.Equals(name))
{
_menuGroupTrans.GetChild(i).GetChild(0).GetComponent<Image>().color = new Color(1f, 1f, 1f, 1f);
}
else
{
_menuGroupTrans.GetChild(i).GetChild(0).GetComponent<Image>().color = new Color(1f, 1f, 1f, 0f);
}
}
}