Unity UGUI 事件监听器:UIEventListener
Unity UGUI 事件监听器:UIEventListener
这段代码定义了一个名为 UIEventListener 的类,用于监听用户在 UI 元素上的操作。它继承了 MonoBehaviour 类,并实现了 IPointerDownHandler, IPointerClickHandler, IPointerUpHandler 接口,以便监听 PointerDown, PointerClick, PointerUp 事件。
代码示例:
public delegate void PointerEventHandler(PointerEventData eventData);
/// <summary>
/// UI事件监听器:管理所有UGUI事件,提供事件参数类。
/// 附加到需要交互的UI元素上,用于监听用户的操作。
/// 类似于 EventTrigger
/// </summary>
public class UIEventListener : MonoBehaviour, IPointerDownHandler, IPointerClickHandler, IPointerUpHandler
{
//3.声明事件
public event PointerEventHandler PointerClick;
public event PointerEventHandler PointerDown;
public event PointerEventHandler PointerUp;
/// <summary>
/// 通过变换组件获取事件监听器
/// </summary>
/// <param name="tf"></param>
/// <returns></returns>
public static UIEventListener GetListener(Transform tf)
{
UIEventListener uiEvent = tf.GetComponent<UIEventListener>();
if (uiEvent == null) uiEvent = tf.gameObject.AddComponent<UIEventListener>();
return uiEvent;
}
//1.继承接口
public void OnPointerClick(PointerEventData eventData)
{
//抽象类 接口(多类抽象行为) 委托(一类抽象行为)
//4. 引发事件
if (PointerClick != null) PointerClick(eventData);
}
public void OnPointerDown(PointerEventData eventData)
{
if (PointerDown != null) PointerDown(eventData);
}
public void OnPointerUp(PointerEventData eventData)
{
if (PointerUp != null) PointerUp(eventData);
}
}
使用方法:
- 将代码保存在名为
UIEventListener.cs的脚本文件中,并将其放置在 Unity 项目的合适位置。 - 在需要监听操作的 UI 元素上添加一个名为
UIEventListener的组件。 - 在代码中,使用以下方式订阅 UI 事件的回调函数:
UIEventListener listener = UIEventListener.GetListener(transform);
listener.PointerClick += OnPointerClick;
listener.PointerDown += OnPointerDown;
listener.PointerUp += OnPointerUp;
- 实现相应的回调函数:
private void OnPointerClick(PointerEventData eventData)
{
// 处理点击事件
}
private void OnPointerDown(PointerEventData eventData)
{
// 处理按下事件
}
private void OnPointerUp(PointerEventData eventData)
{
// 处理抬起事件
}
- 当用户在 UI 元素上进行相应操作时,回调函数将被触发,并在回调函数中处理相应的逻辑。
注意:
这段代码适用于 Unity 中的 UGUI 系统,因此需要在 Unity 项目中使用它。
原文地址: http://www.cveoy.top/t/topic/Ws 著作权归作者所有。请勿转载和采集!