查看: 586|回复: 0
打印 上一主题 下一主题

[其他] Unity 4.6的使用匿名delegate处理uGUI控件事件绑定详解

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-9-30 00:46:17 |只看该作者 |倒序浏览
最近在尝试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;
  • 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));
  • }
  • }

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-8-13 19:38 , Processed in 0.060130 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部