国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > Unity 4.6的使用匿名delegate处理uGUI控件事件绑定的问题

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

来源:程序员人生   发布时间:2015-03-31 08:06:04 阅读次数:3281次
最近在尝试Unity 4.6新版的uGUI。Unity很多操作是要在Inspector中指定,这类方式10分容易上手,乃至1些策划、美术同学也能够做1些东西,很不错。但是有些情况对程序来讲就不合适了。例如,我有10个技能按钮,当点击到某个按钮时触发其对应的技能。如果每一个按钮都手动绑定到某个函数,是否是很麻烦?另外,绑定的这个函数还是没有参数的,难道要写10个函数处理同1个逻辑吗?瞬间觉得10分蛋疼,有无?

针对这类情况,给出1个解法,假定我们已编辑好了n个Button对象:

[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class UISkillPanel : MonoBehaviour  
  2. {  
  3.     // Use this for initialization  
  4.     void Start()  
  5.     {  
  6.         // 获得的玩家技能数据  
  7.         List<SpellInfo> spellList = LocalPlayerData.Inst.SpellList;  
  8.   
  9.         for (int i = 0; i < spellList.Count; i++)  
  10.         {  
  11.             SpellInfo spell = spellList[i];  
  12.             GameObject btnGO = GameObject.Find(string.Format("SkillButton{0}", i));  
  13.   
  14.             //-- 使用匿名delegate处理按钮事件  
  15.             Button btn = btnGO.GetComponent<Button>();  
  16.             btn.onClick.AddListener(  
  17.                 delegate()  
  18.                 {  
  19.                     this.onSkillButtonClick(spell);  
  20.                 }  
  21.                 );  
  22.         }  
  23.     }  
  24.   
  25.     void onSkillButtonClick(SpellInfo spell)  
  26.     {  
  27.         Debug.Log(string.Format("Spell Button Clicked : {0}.", spell.Name));  
  28.     }  
  29. }  

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

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生