U3D对于按钮的事件监听
来源:互联网 发布:ogame银河帝国源码 编辑:程序博客网 时间:2024/05/19 04:03
步骤:
(一)通过层级面板创建一个新的游戏Canvas,在该Canvas上创建一个Panel用于安放各个组件
(二)在Panel上创建一系列的Button。如图:
修改Button的形状,内容和位置。
(三)创建一个名为TestClick的脚本,并在脚本上定义一个Click方法。
using UnityEngine; using System.Collections; public class TestClick : MonoBehaviour { public void Click() { Debug.Log("Button Clicked"); } }
以上四个步骤,虽然已经对按钮进行了事件绑定,但是可以发现弊端非常地明显,就是对于一个按钮,需要用一个Monobehavior来进行监听。显然这样做不行,下面我们来学习下利用Delegate和Event来做一个通用类UIEventListener来处理事件。
关于UIEventListener
首先UIEventListener是什么,以及是干嘛用的,首先借用源码里的注释,注释一目了然,不做翻译了。
NGUI中的UIEventListener使用起来很方便,只需要把UIEventListener这个脚本绑定到一个带有Boxcollider的对象上就可以实现点击,可以实现Button,也可以实现Sprite点击。
UIEventListener.cs 对一些常用的事件进行了封装和继承。
一 常用事件:
void OnClick ():点击事件;
void OnDoubleClick ():二次或多次点击事件
void OnHover (bool isOver):手指覆盖事件;
void OnPress (bool isPressed):手指点击事件,包含按下、抬起;isPressed为按下,false为抬起;
void OnSelect (bool selected):是否被选择;
void OnDrag (Vector2 delta):手指滑动事件;
void OnKey (KeyCode key):“键”事件;
二 实质:
这些监听事件都是建立在委托事件上:
publicdelegatevoid BoolDelegate (GameObject Go, bool state);
public BoolDelegate onPress;
三 前提条件:
UIEventListener的GameObejct包含Colllider;
四 怎使用:
1 静态关联方法:
UIEventListener.Get(GameObject).OnPress += pressList;
2 直接重写:
脚本所在的GameObject包含Colllider,直接重写监听事件:
publicclass SceneTwo : MonoBehaviour {
void OnPress (bool pressed)
{
Debug.Log("OnPress "+enabled+" "+NGUITools.GetActive(gameObject)+" "+pressed);
if (enabled && NGUITools.GetActive(gameObject))
{
}
}
void OnDrag (Vector2 delta)
{
Debug.Log("OnDrag "+enabled+" "+NGUITools.GetActive(gameObject)+" "+delta);
if (enabled && NGUITools.GetActive(gameObject))
{
}
}
}
using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems; public class UIEventListener : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler { /// <summary> /// 定义事件代理 /// </summary> /// <param name="gb"></param> public delegate void UIEventProxy(GameObject gb); /// <summary> /// 鼠标点击事件 /// </summary> public event UIEventProxy OnClick; /// <summary> /// 鼠标进入事件 /// </summary> public event UIEventProxy OnMouseEnter; /// <summary> /// 鼠标滑出事件 /// </summary> public event UIEventProxy OnMouseExit; public void OnPointerClick(PointerEventData eventData) { if (OnClick != null) OnClick(this.gameObject); } public void OnPointerEnter(PointerEventData eventData) { if (OnMouseEnter != null) OnMouseEnter(this.gameObject); } public void OnPointerExit(PointerEventData eventData) { if (OnMouseExit != null) OnMouseExit(this.gameObject); } }
以下是调用的代码:
using UnityEngine; using System.Collections; using UnityEngine.UI; public class Test : MonoBehaviour { // Use this for initialization void Start() { Button btn = this.GetComponent<Button>(); UIEventListener btnListener = btn.gameObject.AddComponent<UIEventListener>(); btnListener.OnClick += delegate(GameObject gb) { Debug.Log(gb.name); }; btnListener.OnMouseEnter += delegate(GameObject gb) { Debug.Log(gb.name); }; btnListener.OnMouseExit += delegate(GameObject gb) { Debug.Log(gb.name); }; } }
- U3D对于按钮的事件监听
- 按钮的监听事件系统
- 监听按钮的点击事件
- 按钮的监听事件--onClick
- 监听按钮的点击事件
- 监听按钮的点击事件
- 监听按钮的点击事件
- UGUI的按钮监听事件
- 监听按钮的点击事件
- U3D添加按钮相应事件
- js对于鼠标滚轮事件的监听
- 对于事件的监听/解除事件工具类
- android监听按钮的点击事件
- Android——按钮的事件监听
- IOS-监听UIAlertView按钮的点击事件
- Android按钮点击监听事件的写法
- UGUI 按钮的监听事件系统
- Android中按钮的点击事件监听
- 12-MySQL数据类型:与Java数据类型对应关系
- CodeForces
- Scala学习笔记
- spring boot 连接fastDFS
- C/C++基础知识3
- U3D对于按钮的事件监听
- [DP] [1D1D优化] [FFT] [CDQ分治] [HDU5730] Shell Necklace
- (JAVA) 消除类游戏-201512-2
- poj1101和openjudge 小游戏
- shell编程-字符处理命令
- GIT 如何合并另一个远程Git仓库的文件到本地仓库里某个指定子文件夹并不丢失远程提交记录?
- Redis源码剖析和注释(二十三)--- Redis Sentinel实现(哨兵的执行过程和执行的内容)
- C++定义一个类,如果成员变量没有说明是共有还是私有那默认的是哪一个?
- Caffe学习系列——Faster-RCNN训练自己的数据集