您的位置:首页 > 移动开发 > Unity3D

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");
}
}


最后声明未经同意不得转载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: