
先说明一下按钮的监听事件:
//定义按钮
public Button btn
//添加监听方法
void Start ()
{
btn.GetComponent ().onClick.AddListener (TestAction)
}
voidTestAction ()
{
//写监听事件
}
在unity场景中创建的按钮身上添加相应的按钮事件即可。
----------------------------------------------------------------------------------------------------------------------------
如何将一张普通的Image写成按钮监听事件呢?
//定义一张图片Image
GameObject Img
//查找
Img= transform.Find("Image").gameObject
//添加监听事件
EventTriggerListener.Get(Img).onClick = (GameObject go) =>
{
//监听事件内容
}
此时Unity中一个Image物体相当于一个按钮,可以做相应的事件处理了。
for (int i = 0i <Btn_Arr.Lengthi++) {Btn_Arr[i].onClick.AddListener(delegate { OnClick(i)})
}
这个循环实际上是通过委托进行了一次闭包 *** 作:delegate委托的内部变量i使用了外部循环的变量i,这就导致了i的实际作用域已经随外部变化而迁移。你端代码的实际效果就是所有的按钮最终添加的响应事件都指向了 OnClick(Btn_Arr.Length-1),因为这是i在这个循环内的最终值。
要实现你的要求其实也很简单,稍微改一下就好:
for (int i = 0i <Btn_Arr.Lengthi++) {
Button btn =Btn_Arr[i].
btn .onClick.AddListener(delegate { OnClick(btn )})
}
//.....
private void OnClick(Button btn)
{
int num= Array.IndexOf(Btn_Arr,btn)
switch (num)
{
//......
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)