invoke 按钮点击_Jtro的技术分享:封装游戏按钮事件(悬浮,进入,点击)

本文介绍了如何在Unity中封装游戏按钮事件,包括点击、鼠标进入和离开事件。通过查找节点对象并获取按钮组件,然后创建自定义的EventTriggerListener类,重写OnPointerClick、OnPointerEnter和OnPointerExit方法。提供了静态方法注册这3种事件,使得按钮事件的处理更加方便。示例代码展示了如何优雅地调用这些注册方法。
摘要由CSDN通过智能技术生成

首先,思路是这样,根据按钮的名称,获取到按钮的组件,然后再为按钮加上按钮事件

第一步,获取按钮的transform 可以放在你的工具类中

///

/// 查找节点对象

///

/// 父对象的GameObject

/// 子对象

///

public static Transform FindChildNode(GameObject goParent, string childName)

{

Transform searchTrans = null;

searchTrans = goParent.transform.Find(childName);

if (searchTrans == null)

{

//遍历父物体的所有子节点

foreach (Transform item in goParent.transform)

{

searchTrans = FindChildNode(item.gameObject, childName);

if (searchTrans != null)

{

return searchTrans;

}

}

}

return searchTrans;

}

这样使用递归算法获取你所需要查找的组件,然后在Getcomponent(),获取到button组件,

第二步,封装按钮事件,也就是重写按钮组件的3个方法

public class EventTriggerListener : EventTrigger

{

public delegate void MyEventHandler(GameObject go);

public MyEventHandler onClick;

public MyEventHandler onMouseEnter;

public MyEventHandler onMouseExit;

public static EventTriggerListener GetListener (GameObject go)

{

EventTriggerListener eventTriggerListener = go.GetComponent();

if (eventTriggerListener == null)

{

eventTriggerListener = go.AddComponent();

}

return eventTriggerListener;

}

public override void OnPointerClick(PointerEventData eventData)

{

onClick?.Invoke(gameObject);

}

public override void OnPointerEnter(PointerEventData eventData)

{

onMouseEnter?.Invoke(gameObject);

}

public override void OnPointerExit(PointerEventData eventData)

{

onMouseExit?.Invoke(gameObject);

}

}

然后是按钮的事件,可以直接调用

public class btnEvent : MonoBehaviour

{

///

/// 注册按钮点击事件

///

/// 按钮名称

/// 点击的事件

public static void RigisterButtonClickEvent(GameObject buttonObj, EventTriggerListener.MyEventHandler myEventHandler)

{

if (buttonObj != null)

{

EventTriggerListener.GetListener(buttonObj).onClick = myEventHandler;

}

}

///

/// 注册按钮悬停事件

///

///

///

public static void RigisterButtonEnterEvent(GameObject buttonObj, EventTriggerListener.MyEventHandler myEventHandler)

{

if (buttonObj !=null)

{

EventTriggerListener.GetListener(buttonObj).onMouseEnter = myEventHandler;

}

}

///

/// 注册按钮离开事件

///

///

///

public static void RigisterButtonExitEvent(GameObject buttonObj, EventTriggerListener.MyEventHandler myEventHandler)

{

if (buttonObj != null)

{

EventTriggerListener.GetListener(buttonObj).onMouseExit = myEventHandler;

}

}

调用的优雅代码:

btnEvent.RigisterButtonClickEvent( Btnlogin.gameObject//按钮的名称, p => {

Eventbtnlogin.Invoke();//按钮调用的方法

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值