免费网站制作作业今日足球赛事推荐
事件:玩家和游戏交互的一种方式
键盘、鼠标、手柄、麦克风、重力检测,触摸,VR(手柄,眼镜)
自定义点击实现
由于Unity是组件化开发思想,所以自定义按钮也是使用组件Script实现
编写自定义事件步骤
1.引入自定义事件命名空间(UnityEngine.EventSystems)
2.实现自定义事件Interface
3.用户交互会触发回调函数
点击事件接口系列
IPointerEnterHandler:鼠标光标移入射线检测区域,触发回调函数
IPointerExitHandler:鼠标光标移出射线检测区域,触发回调函数
IPointerDownHandler:鼠标在射线检测区域中按下,触发回调函数
IPointerUpHandler
前提:需要先触发按下事件
情况1:鼠标在射线检测区域中按下并抬起(正常点击)
情况2:鼠标在射线检测区域中按下,移出射线检测区域后抬起(点击后取消)
IPointerClickHandler:鼠标在射线检测区域中按下并抬起,触发回调函数,Up的情况2是不会触发Click事件的。
//如果自定义事件,需要引入Unity的事件系统命名空间
using UnityEngine.EventSystems;
public class MyButton:MonoBehaviour,
IPointerEnterHandler,IPointerExitHandler,
IPointerDownHandler,IPointerUpHandler
{//鼠标移入射线检测区域后,执行回调函数public void OnPointerEnter(PointerEventData eventData){Debug.Log("鼠标移入");}//显式实现接口的抽象方法(避免多个接口中,抽象方法重名)//鼠标移出射线检测区域后,执行回调函数void IPointerExitHandler.OnPointerExit(PointerEventData eventData){Debug.Log("鼠标移出");}public void OnPointerDown(PointerEventData eventData){Debug.Log("按钮已被按下,执行对应方法");}void IPointerUpHandler.OnPointerUp(PointerEventData eventData){Debug.Log("按钮在按下后被抬起,执行对应方法");}//编写Start生命周期函数,组件在编辑器中才会显示private void Start(){}
}
挂载到按钮后移入移出及按下抬起运行如下:
为脚本添加事件:
using UnityEngine.Events;//引用事件所需命名空间
public UnityEvent onClick; //在类中声明事件
onClick.Invoke();//执行onclick中添加的回调函数
长按实现
public UnityEvent OnLongClickBegin;public UnityEvent OnLongClickEnd;public float longClickTime=3f;private float pressedTime = 0f;private bool isPressed = false;private bool isInLongClick = false; //在前代码的基础上增加的新的代码,自行修改调试public void OnPointerDown(PointerEventData eventData){Debug.Log("按钮已被按下,执行对应方法");isPressed = true;}void IPointerUpHandler.OnPointerUp(PointerEventData eventData){Debug.Log("按钮在按下后被抬起,执行对应方法");pressedTime= 0;isPressed= false;if (isInLongClick){isInLongClick= false;OnLongClickEnd.Invoke();}}private void Update(){//一旦开始按下按钮,则开始使用帧间距时间,记录按下的时间if (isPressed){//每帧检测,如果按下的时间超过了设置的长按阈值,则触发长按事件if (!isInLongClick && pressedTime > longClickTime){//一旦开始长按,就处于长按状态中isInLongClick = true;OnLongClickBegin.Invoke();}pressedTime += Time.deltaTime;}}//挂载在onclick事件上的脚本,另起脚本
public class TestMyButton : MonoBehaviour
{public void LongClickBegin(){Debug.Log("开始长按");}public void LongClickEnd(){Debug.Log("结束长按");}
}
该系列专栏为网课课程笔记,仅用于学习参考。