Unity 4.6的使用匿名delegate处理uGUI控件事件绑定


最近在尝试Unity 4.6新版的uGUI。Unity很多操作是要在Inspector中指定,这种方式十分容易上手,甚至一些策划、美术同学也可以做一些东西,很不错。但是有些情况对于程序来说就不适合了。例如,我有10个技能按钮,当点击到某个按钮时触发其对应的技能。如果每个按钮都手动绑定到某个函数,是不是很麻烦?另外,绑定的这个函数还是没有参数的,难道要写10个函数处理同一个逻辑吗?瞬间觉得十分蛋疼,有没有?

针对这种情况,给出一个解法,假设我们已经编辑好了n个Button对象:

    public class UISkillPanel : MonoBehaviour
    {
        // Use this for initialization
        void Start()
        {
            // 取得的玩家技能数据
            List<SpellInfo> spellList = LocalPlayerData.Inst.SpellList;

            for (int i = 0; i < spellList.Count; i++)
            {
                SpellInfo spell = spellList[i];
                GameObject btnGO = GameObject.Find(string.Format("SkillButton{0}", i));

                //-- 使用匿名delegate处理按钮事件
                Button btn = btnGO.GetComponent<Button>();
                btn.onClick.AddListener(
                    delegate()
                    {
                        this.onSkillButtonClick(spell);
                    }
                    );
            }
        }

        void onSkillButtonClick(SpellInfo spell)
        {
            Debug.Log(string.Format("Spell Button Clicked : {0}.", spell.Name));
        }
    }

此写法动态传入spell参数,也解决了按钮与技能对应的关系问题。:)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值