Unity 4.6的使用匿名delegate處理uGUI控件事件綁定的問題
來源:程序員人生 發布時間:2015-03-31 08:06:04 閱讀次數:3455次
最近在嘗試Unity 4.6新版的uGUI。Unity很多操作是要在Inspector中指定,這類方式10分容易上手,乃至1些策劃、美術同學也能夠做1些東西,很不錯。但是有些情況對程序來講就不合適了。例如,我有10個技能按鈕,當點擊到某個按鈕時觸發其對應的技能。如果每一個按鈕都手動綁定到某個函數,是否是很麻煩?另外,綁定的這個函數還是沒有參數的,難道要寫10個函數處理同1個邏輯嗎?瞬間覺得10分蛋疼,有無?
針對這類情況,給出1個解法,假定我們已編輯好了n個Button對象:
-
public class UISkillPanel : MonoBehaviour
-
{
-
-
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));
-
-
-
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參數,也解決了按鈕與技能對應的關系問題。:)
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈