Unity3d UGUI Button 长按事件的实现策略,及其其他功能实现原理
2018-03-27 00:02
781 查看
因为Unity3d的UGUI只提供了OnClick的方法接口但并不意味之UGUI的Button的长按事件无法实现。
Unity3d的设计提前就为我们提供了预留的Button接口,所以我们只需要去继承相应的接口就可以扩展原有Button的响应事件。
查看官方的Button设计
发现其实现了四个管理者接口,并且其字如其义,在看Button的父类我们就会恍然大悟了!
哈哈是不是突然就明白了!
这不是ButtonEnter,ButtonExit,ButtonClick,ButtonDown,ButtonUp了吗?都齐了哈!
所以我们为每一个Button的实现类继承响应的IPointerUpHandler, IPointerDownHandler就可以达到我们的目的!
本人只提供最简洁的实现策略,如想实现其他功能请自行设计。
[策略思路]: 声明一个isPress Bool 类型记录Button的长按状态,在Button按下时isPress设为true,并InvokeRepeating,一个你需要实现的功能方法,Button抬起时isPress设为false,并利用isPress状态进行(实现的功能方法)的排错。
[需求]:引入响应的命名空间 UnityEngine.EventSystems
[实现代码]:public class OnPressBtn : MonoBehaviour, IPointerUpHandler, IPointerDownHandler
{
private bool isPress = false;
public void OnPointerUp(PointerEventData eventData)
{
isPress = false;
CancelInvoke("OnPress");
Debug.Log("Up");
}
public void OnPointerDown(PointerEventData eventData)
{
isPress = true;
InvokeRepeating("OnPress", 0, 0.1f);
Debug.Log("Down");
}
private void OnPress()
{
MyFunction();
}
public void MyFunction()
{ if(isPress)
Debug.Log("Pressing");
}
}
最后声明未经同意不得转载
Unity3d的设计提前就为我们提供了预留的Button接口,所以我们只需要去继承相应的接口就可以扩展原有Button的响应事件。
查看官方的Button设计
发现其实现了四个管理者接口,并且其字如其义,在看Button的父类我们就会恍然大悟了!
哈哈是不是突然就明白了!
这不是ButtonEnter,ButtonExit,ButtonClick,ButtonDown,ButtonUp了吗?都齐了哈!
所以我们为每一个Button的实现类继承响应的IPointerUpHandler, IPointerDownHandler就可以达到我们的目的!
本人只提供最简洁的实现策略,如想实现其他功能请自行设计。
[策略思路]: 声明一个isPress Bool 类型记录Button的长按状态,在Button按下时isPress设为true,并InvokeRepeating,一个你需要实现的功能方法,Button抬起时isPress设为false,并利用isPress状态进行(实现的功能方法)的排错。
[需求]:引入响应的命名空间 UnityEngine.EventSystems
[实现代码]:public class OnPressBtn : MonoBehaviour, IPointerUpHandler, IPointerDownHandler
{
private bool isPress = false;
public void OnPointerUp(PointerEventData eventData)
{
isPress = false;
CancelInvoke("OnPress");
Debug.Log("Up");
}
public void OnPointerDown(PointerEventData eventData)
{
isPress = true;
InvokeRepeating("OnPress", 0, 0.1f);
Debug.Log("Down");
}
private void OnPress()
{
MyFunction();
}
public void MyFunction()
{ if(isPress)
Debug.Log("Pressing");
}
}
最后声明未经同意不得转载
相关文章推荐
- Unity3d 使用UGUI实现button其他事件处理
- 表达式树及其变体,以及我是如何借着个原理实现简易计算器的功能的
- uGUI使用代码动态添加Button.OnClick()事件(Unity3D开发之十二)
- UGUI—Button功能的实现
- 实现像UGUI中Button一样可以拖拽绑定事件
- Ext.Net.button 和其他控件,实现不同点击事件效果(包括调用自定义控件)
- [原创]unity3D学习【功能实现】之六:延续功能五,血条,点击减血等ugui
- CMAP原理及其在MFC中的实现(MAP模板没有顺序遍历的功能)
- 加强2注解。泛型。类加载器及其委托机制。代理的概念与作用原理,AOP概念。实现AOP功能的封装与配置。类似Spring。
- CMAP原理及其在MFC中的实现(MAP模板没有顺序遍历的功能)
- Unity3d之UGUI- Image拦截Button响应事件
- unity3D,NGUI中button响应事件实现
- Unity3d之UGUI- Image拦截Button响应事件
- Unity3D-UGUI-drag and drop实现拖拽放下功能
- [VB.NET]利用vb.net创建一个完全可编辑的DataGrid,从而实现操作Access数据库进行增,删,改的功能,前提是不用任何其他的Button
- Unity3d之UGUI- Image拦截Button响应事件
- 事件委托在哪些场景中使用,该如何使用,及其实现原理?
- C/C++_atoi,itoa功能及其实现原理
- WPF第二篇Button--事件实现原理,多边形Button,阴影效果
- unity3D 在UGUI中动态添加button的监听事件