【Unity】使用数组及链表控制多个按钮及对应事件

遇到了一个情况,需要用多个按钮来控制多个物体的显示隐藏,思路如下:

首先,获取所有按钮,添加到链表内,同时把所有的物体添加进另外一个链表内,然后通过名称来进行控制(按钮和物体的名字对应)。

中间遇到了几个问题,其中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需要进行特定的设置,如代码所示

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜梦说开发(VR)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值