遇到了一个情况,需要用多个按钮来控制多个物体的显示隐藏,思路如下:
首先,获取所有按钮,添加到链表内,同时把所有的物体添加进另外一个链表内,然后通过名称来进行控制(按钮和物体的名字对应)。
中间遇到了几个问题,其中1个就是无法加载物体实例。PS:竟然是忘记给链表New了,这样的基础常识有点坑了。
private void GetUI()
{
Btn_Shebei1 = ShebeiPanel.transform.Find("Btn_Shebei1").gameObject;//按钮组1
Btn_Shebei2 = ShebeiPanel.transform.Find("Btn_Shebei2").gameObject;//按钮组2
Btn_Shebei3 = ShebeiPanel.transform.Find("Btn_Shebei3").gameObject;//按钮组3
PanelImg = ShebeiPanel.transform.Find("PanelImg").gameObject;//物体组1
Btn_Objs = new List<GameObject>();//按钮列表
Img_objs = new List<GameObject>();//物体列表
GetObj(Btn_Objs,Btn_Shebei1);
GetObj(Btn_Objs, Btn_Shebei2);
GetObj(Btn_Objs, Btn_Shebei3);
}
/// <summary>
/// 把一个物体下的所有子物体添加进链表中
/// </summary>
/// <param name="objs">链表</param>
/// <param name="obj">物体</param>
private void GetObj(List<GameObject> objs,GameObject obj)
{
for (int i = 0; i < obj.transform.childCount; i++)
{
objs.Add(obj.transform.GetChild(i).gameObject);
Debug.Log(obj.transform.GetChild(i).name);
}
}
后续问题:
按钮组2和按钮组3是按钮组1中的一个按钮触发的,同时显示物体,这一块需要解决,暂时先写到这里,后面继续解决这个问题。
接上述问题的后续。
本来是挺简单的一个问题,硬是让我想了好久,有点愧对我对年的经验了。
贴上后续内容脚本:
/// <summary>
/// 所有按钮与物体对应的控制
/// </summary>
private void AddBtn()
{
foreach (GameObject btn_item in Btn_Objs)
{
btn_item.GetComponent<Button>().onClick.AddListener(() => {
foreach (GameObject img_obj in Img_objs)
{
if (img_obj.name == btn_item.name)//如果按钮和物体名字相同,则物体显示,否则物体消失
{
img_obj.SetActive(true);//如果名字相同的物体激活
Btn_Cro(btn_item);
}
else
{
//让所有的图片都消失
img_obj.SetActive(false);
}
}
});
}
}
/// <summary>
/// 针对按钮组2,按钮组3的控制
/// </summary>
/// <param name="btn_item"></param>
private void Btn_Cro(GameObject btn_item)
{
//如果点击的名字是前处理按钮,或者是提升机、除梗破碎机按钮,则激活按钮组2 否则按钮组2消失
if (btn_item.name == "QianChuli" || btn_item.name == "Tishengji" || btn_item.name == "Chugeng")
{
Btn_Shebei2.SetActive(true);
}
else
{
Btn_Shebei2.SetActive(false);
}
//如果点击的名字是生产线按钮,或者是在按钮组3里面的子按钮,则激活按钮组3 否则按钮组3消失
if (btn_item.name == "Shengchanxian" || btn_item.transform.parent.name == "Btn_Shebei3")//按下生产线按钮 按钮数组3显示控制
{
Btn_Shebei3.SetActive(true);
}
else
{
Btn_Shebei3.SetActive(false);
}
}
简单说一下思路:
1、获取所有的按钮和所有的图片。
2、设置按钮和图片名称相同。
3、给按钮添加事件响应,如果按钮名称相同则图片显示。
4、在上一步中,添加方法,解决按钮组2按钮组3的控制
5、按钮组2和按钮组3需要进行特定的设置,如代码所示