一、UnityPointerEventData是什麼
Unity中,PointerEventData是表示指針設備(例如鼠標、觸摸屏)觸摸輸入的所有事件數據的抽象類。UnityPointerEventData是PointerEventData的一個子類,增加了幾個額外的屬性和方法,用於更方便地處理Unity的UI事件。
UnityPointerEventData定義了在特定UI事件中相關的指針信息(例如鼠標位置、觸摸ID等)。類似於PointerEventData,UnityPointerEventData也包括鼠標、觸摸和自定義輸入等。
public class UnityPointerEventData : PointerEventData
{
public List 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
三、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等對象進行交互,可以更容易地實現交互效果,提高開發效率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/286584.html