关于UGUI事件EventListener怎么用代码直接绑定事件
2016-10-21 19:09
267 查看
将以下脚本放入工程文件
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger{
public delegate void VoidDelegate (GameObject go);
public VoidDelegate onClick;
public VoidDelegate onDown;
public VoidDelegate onEnter;
public VoidDelegate onExit;
public VoidDelegate onUp;
public VoidDelegate onSelect;
public VoidDelegate onUpdateSelect;
static public EventTriggerListener Get (GameObject go)
{
EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
if (listener == null) listener = go.AddComponent<EventTriggerListener>();
return listener;
}
public override void OnPointerClick(PointerEventData eventData)
{
if(onClick != null) onClick(gameObject);
}
public override void OnPointerDown (PointerEventData eventData){
if(onDown != null) onDown(gameObject);
}
public override void OnPointerEnter (PointerEventData eventData){
if(onEnter != null) onEnter(gameObject);
}
public override void OnPointerExit (PointerEventData eventData){
if(onExit != null) onExit(gameObject);
}
public override void OnPointerUp (PointerEventData eventData){
if(onUp != null) onUp(gameObject);
}
public override void OnSelect (BaseEventData eventData){
if(onSelect != null) onSelect(gameObject);
}
public override void OnUpdateSelected (BaseEventData eventData){
if(onUpdateSelect != null) onUpdateSelect(gameObject);
}
}然后在自己物体上绑定事件,如下
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Events;
public class UIMain : MonoBehaviour {
Button button;
Image image;
void Start ()
{
button = transform.Find("Button").GetComponent<Button>();
image = transform.Find("Image").GetComponent<Image>();
EventTriggerListener.Get(button.gameObject).onClick =OnButtonClick;
EventTriggerListener.Get(image.gameObject).onClick =OnButtonClick;
}
private void OnButtonClick(GameObject go){
//在这里监听按钮的点击事件
if(go == button.gameObject){
Debug.Log ("DoSomeThings");
}
}
}这样在整个项目中,就不用再面板中绑定eventlistener事件手动拖拽了。
当然 ,你还可以扩展EventTriggerListener类或者让物体继承一些Ipoint之类的接口来实现按钮点击拖拽等功能。
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger{
public delegate void VoidDelegate (GameObject go);
public VoidDelegate onClick;
public VoidDelegate onDown;
public VoidDelegate onEnter;
public VoidDelegate onExit;
public VoidDelegate onUp;
public VoidDelegate onSelect;
public VoidDelegate onUpdateSelect;
static public EventTriggerListener Get (GameObject go)
{
EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
if (listener == null) listener = go.AddComponent<EventTriggerListener>();
return listener;
}
public override void OnPointerClick(PointerEventData eventData)
{
if(onClick != null) onClick(gameObject);
}
public override void OnPointerDown (PointerEventData eventData){
if(onDown != null) onDown(gameObject);
}
public override void OnPointerEnter (PointerEventData eventData){
if(onEnter != null) onEnter(gameObject);
}
public override void OnPointerExit (PointerEventData eventData){
if(onExit != null) onExit(gameObject);
}
public override void OnPointerUp (PointerEventData eventData){
if(onUp != null) onUp(gameObject);
}
public override void OnSelect (BaseEventData eventData){
if(onSelect != null) onSelect(gameObject);
}
public override void OnUpdateSelected (BaseEventData eventData){
if(onUpdateSelect != null) onUpdateSelect(gameObject);
}
}然后在自己物体上绑定事件,如下
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using UnityEngine.Events;
public class UIMain : MonoBehaviour {
Button button;
Image image;
void Start ()
{
button = transform.Find("Button").GetComponent<Button>();
image = transform.Find("Image").GetComponent<Image>();
EventTriggerListener.Get(button.gameObject).onClick =OnButtonClick;
EventTriggerListener.Get(image.gameObject).onClick =OnButtonClick;
}
private void OnButtonClick(GameObject go){
//在这里监听按钮的点击事件
if(go == button.gameObject){
Debug.Log ("DoSomeThings");
}
}
}这样在整个项目中,就不用再面板中绑定eventlistener事件手动拖拽了。
当然 ,你还可以扩展EventTriggerListener类或者让物体继承一些Ipoint之类的接口来实现按钮点击拖拽等功能。
相关文章推荐
- UGUI中使用代码动态绑定触发事件
- 关于怎么绑定Jquery 的scroll事件(兼容浏览器)
- UGUI中使用代码动态绑定触发事件
- 关于委托和事件的形象代码
- 数据绑定控件的ItemDataBound事件中怎么得到数据库字段的值
- Javascript循环绑定事件的示例代码
- 关于Java核心技术书中的代码点和代码单元是怎么理解的呢?
- matrox meteor_II standard 卡接触发,代码如下,非常简单,但要查询,没有事件驱动.将卡的42脚和39脚直接短路即可.
- 在aspx页面中直接绑定代码文件中的变量
- DropDownList,在Init 事件中编写代码,绑定数据表
- 关于WebUI中WebGrid的层次结构,代码绑定数据
- CheckBoxList是后台代码手动绑定的,前台页面怎么做全选啊?
- 关于Form KeyDown事件的处理代码执行两次的问题
- 关于引用了母版页后,怎么在内容页里写javascript的验证表单的代码?
- GridView控件常见问题及处理方法===1. 关于隐藏字段的处理:==2. 关于按钮列的事件:==3. 关于按钮的客户端提示:==4. 关于时间字段的格式化输出:==5. 关于绑定空记录:
- DataList嵌套DataList(页面绑定后台代码使用ItemDataBound事件实现 纯代码)
- 关于加密,随机数,和后台绑定前台事件的做法
- 关于repeater内控件的事件绑定,内部模板列
- Javascript循环绑定事件的示例代码
- asp.net关于onpropertychange和oninput事件实现代码