纳金网
标题: Unity 4.6的使用匿名delegate处理uGUI控件事件绑定详解 [打印本页]
作者: 烟雨 时间: 2015-1-30 23:33
标题: 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参数,也解决了按钮与技能对应的关系问题。
转载: 游戏开发网
欢迎光临 纳金网 (http://go.narkii.com/club/) |
Powered by Discuz! X2.5 |