一、UnityPointerEventData是什么
Unity中,PointerEventData是表示指针设备(例如鼠标、触摸屏)触摸输入的所有事件数据的抽象类。UnityPointerEventData是PointerEventData的一个子类,增加了几个额外的属性和方法,用于更方便地处理Unity的UI事件。 UnityPointerEventData定义了在特定UI事件中相关的指针信息(例如鼠标位置、触摸ID等)。类似于PointerEventData,UnityPointerEventData也包括鼠标、触摸和自定义输入等。
public class UnityPointerEventData : PointerEventData
{
public List<RaycastResult> hoveredItems { get; set; }
public GameObject pointerPress { get; set; }
public UnityPointerEventData(EventSystem eventSystem)
: base(eventSystem) { }
public override void Reset()
{
base.Reset();
hoveredItems.Clear();
pointerPress = null;
}
}
二、UnityPointerEventData的属性
1、hoveredItems
hoveredItems是一个RaycastResult列表,表示当前PointerEventData指针下的UI元素。当指针进入、移动或离开UI元素时,事件系统会根据PointerEventData生成新的RaycastResult列表。当识别到指针进入UI元素时,事件系统会执行多个HitTest,并添加每个HitTest的结果到hoveredItems列表。这个列表是只读的,无法直接更改。
foreach (var hoveredItem in eventData.hoveredItems)
{
// Handle the hovered item
}
2、pointerPress
pointerPress是一个GameObject,表示在手指按下时被点击的UI元素。它被赋予UI元素的引用,当指针按下时它会被设置为pointerPress。当指针在UI元素上移动时,pointerPress将不会改变,直到指针在UI元素外部释放。
if (eventData.pointerPress != null)
{
eventData.pointerPress.GetComponent<Button>().onClick.Invoke();
}
三、UnityPointerEventData的方法
1、Reset()
Reset()是PointerEventData的一个重载方法,在每次处理事件之前,它将重新设置所有属性。
eventData.Reset();
2、IsPointerMoving()
IsPointerMoving()是一个便捷方法,用于确定指针是否正在移动。它返回一个布尔值,表示指针是否正在移动。如果有,则返回true,否则返回false。
if (eventData.IsPointerMoving())
{
Debug.Log("The pointer is moving!");
}
3、IsScrolling()
IsScrolling()是一个便捷方法,用于确定是否正在滚动。它返回一个布尔值,表示滚动是否在进行中。如果正在滚动,则返回true,否则返回false。
if (eventData.IsScrolling())
{
Debug.Log("The user is scrolling!");
}
四、小结
UnityPointerEventData是扩展了基本PointerEventData的子类,封装了更多的UI事件信息,方便处理Unity中UI相关的事件。通过与hoveredItems和pointerPress等对象进行交互,可以更容易地实现交互效果,提高开发效率。