编写监听脚本 PEListenter
- 继承自
MonoBehaviour
类,并实现了IPointerDownHandler
、IPointerUpHandler
和IDragHandler
接口,按照需求定义需要接收事件(鼠标按下、抬起、拖拽)的回调函数
//监听类(需要挂载在物体上面)
public class PEListenter : MonoBehaviour, IPointerDownHandler,IPointerUpHandler,IDragHandler
{
//存储点击,抬起,拖拽事件的回调
public Action<PointerEventData> onClickDown;
public Action<PointerEventData> onClickUp;
public Action<PointerEventData> onDrag;
//OnPointerDown方法在用户按下鼠标时被调用,它接收一个PointerEventData参数,
//可以通过该参数获取有关鼠标点击事件的信息。
//当鼠标拖动时,Unity将调用此方法。它检查onClickDown回调函数是否为null,不为空,则调用回调并传递eventData参数。
public void OnPointerDown(PointerEventData eventData)
{
if (onClickDown != null)
{
onClickDown(eventData);
}
}
//OnPointerUp方法在用户抬起鼠标时被调用
public void OnPointerUp(PointerEventData eventData)
{
if (onClickUp != null)
{
onClickUp(eventData);
}
}
//OnDrag方法在用户拖动鼠标时被调用
public void OnDrag(PointerEventData eventData)
{
if (onDrag != null)
{
onDrag(eventData);
}
}
}
操作函数封装
- 这段代码是一个用于获取或添加组件的方法
GetOrAddComponect<T>(GameObject go)
和一个封装点击事件的方法 OnClickDown(GameObject go, Action<PointerEventData> cb)
protected T GetOrAddComponect<T>(GameObject go)where T : Component
{
T t = go.GetComponent<T>();
if (t == null)
{
t = go.AddComponent<T>();
}
return t;
}
//各类点击事件的封装
protected void OnClickDown(GameObject go,Action<PointerEventData> cb)
{
//调用GetOrAddComponect函数对go物体进行脚本添加,并赋值给实例化listener
//为listener内的点击事件传入回调函数
PEListenter listener = GetOrAddComponect<PEListenter>(go);
listener.onClickDown = cb;
}
protected void OnClickUp(GameObject go, Action<PointerEventData> cb)
{
//只有点击挂载了PEClicke脚本的物体才有鼠标事件的数据
PEListenter listener = GetOrAddComponect<PEListenter>(go);
listener.onClickUp = cb;
}
protected void OnDrag(GameObject go, Action<PointerEventData> cb)
{
//只有点击挂载了PEClicke脚本的物体才有鼠标事件的数据
PEListenter listener = GetOrAddComponect<PEListenter>(go);
listener.onDrag = cb;
}
GetOrAddComponect<T>(GameObject go)
方法的目的是为了获取指定游戏对象 go
上的一个特定类型的组件 T
,如果该组件不存在,则会自动添加该组件到游戏对象上。这个方法使用了泛型 <T>
,使得可以动态地传入不同类型的组件。该方法返回类型为 T
的组件。
T
:表示一个继承自 Component
类的类型,这样确保传入的类型是一个组件类型。
go
:表示要获取或添加组件的游戏对象。
OnClickDown(GameObject go, Action<PointerEventData> cb)
方法是一个封装了点击事件的方法,它接受两个参数:
go
:表示要绑定点击事件的游戏对象。
cb
:表示点击事件发生时要执行的回调函数,它接受一个 PointerEventData
参数,通常用于处理点击事件的具体逻辑。
- 在
OnClickDown
方法内部,首先调用了 GetOrAddComponect<PEListenter>(go)
方法获取或添加了一个名为 PEListenter
的组件,并将返回的 PEListenter
实例赋值给 listener
变量。然后,将传入的点击事件回调函数 cb
赋值给 listener
实例的 onClickDown
委托,这样当点击事件发生时,就会执行这个回调函数。
具体函数调用
public void RegisterTouchEvts()
{
//鼠标按下,轮盘位置改变,点出现,记录鼠标开始位置
//imgTouch是需要事件监听的非按钮物体
OnClickDown(imgTouch.gameObject, (PointerEventData evt) =>
{
//当鼠标在非按钮物体按下,需要进行的操作
});
//鼠标抬起,轮盘位置恢复,点隐藏
OnClickUp(imgTouch.gameObject, (PointerEventData evt) => {
//当鼠标在非按钮物体按下,需要进行的操作
});
//拖拽,设置点的位置,在40范围内以及超出40
OnDrag(imgTouch.gameObject, (PointerEventData evt) => {
//当鼠标在非按钮物体按下,需要进行的操作
});
}