Unity UGUI的PointerEventData的介紹及使用

2023-07-28 06:02:09

Unity UGUI的PointerEventData的介紹及使用

1. 什麼是PointerEventData?

PointerEventData是Unity中UGUI系統中的一個重要元件,用於處理使用者輸入的指標事件。它可以獲取使用者的點選、拖拽、捲動等操作,並提供了一系列的屬性和函數來處理這些事件。

2. PointerEventData的工作原理

PointerEventData通過封裝底層的輸入系統,將使用者的輸入事件轉化為Unity中的事件。它可以獲取使用者的點選位置、點選型別、點選物件等資訊,並將這些資訊傳遞給相應的事件處理常式。

3. PointerEventData的常用屬性

  • position:獲取使用者點選的螢幕座標。
  • delta:獲取使用者拖拽的位移量。
  • button:獲取使用者點選的滑鼠按鈕。
  • clickCount:獲取使用者點選的次數。
  • pointerEnter:獲取滑鼠指標所在的UI物件。

4. PointerEventData的常用函數

  • GetPress():判斷滑鼠按鈕是否按下。
  • GetPressDown():判斷滑鼠按鈕是否剛剛按下。
  • GetPressUp():判斷滑鼠按鈕是否剛剛擡起。
  • IsPointerMoving():判斷滑鼠指標是否在移動。
  • IsPointerOverGameObject():判斷滑鼠指標是否在UI物件上。

5. 完整例子程式碼

例子1:獲取滑鼠點選位置

using UnityEngine;
using UnityEngine.EventSystems;

public class ClickPosition : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("點選位置:" + eventData.position);
    }
}

操作步驟:

  1. 建立一個空物體,並將指令碼掛載到該物體上。
  2. 在場景中點選滑鼠,檢視控制檯輸出的點選位置。

注意事項:

  • 需要將指令碼掛載到有Collider元件的物體上,以便接收滑鼠點選事件。

例子2:判斷滑鼠按鈕是否按下

using UnityEngine;
using UnityEngine.EventSystems;

public class ButtonPress : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public void OnPointerDown(PointerEventData eventData)
    {
        Debug.Log("滑鼠按鈕按下");
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("滑鼠按鈕擡起");
    }
}

操作步驟:

  1. 建立一個按鈕,並將指令碼掛載到該按鈕上。
  2. 按下和擡起滑鼠按鈕,檢視控制檯輸出。

注意事項:

  • 需要將指令碼掛載到Button元件上,以便接收滑鼠按鈕事件。

例子3:獲取滑鼠拖拽位移

using UnityEngine;
using UnityEngine.EventSystems;

public class DragPosition : MonoBehaviour, IDragHandler
{
    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log("拖拽位移:" + eventData.delta);
    }
}

操作步驟:

  1. 建立一個物體,並將指令碼掛載到該物體上。
  2. 按住滑鼠左鍵拖拽物體,檢視控制檯輸出的拖拽位移。

注意事項:

  • 需要將指令碼掛載到有Collider元件的物體上,以便接收滑鼠拖拽事件。

例子4:判斷滑鼠指標是否在UI物件上

using UnityEngine;
using UnityEngine.EventSystems;

public class PointerOverUI : MonoBehaviour
{
    public void Update()
    {
        if (EventSystem.current.IsPointerOverGameObject())
        {
            Debug.Log("滑鼠指標在UI物件上");
        }
    }
}

操作步驟:

  1. 建立一個UI物件,並將指令碼掛載到一個空物體上。
  2. 將滑鼠指標移動到UI物件上,檢視控制檯輸出。

注意事項:

  • 需要將指令碼掛載到一個空物體上,並在Update函數中判斷滑鼠指標是否在UI物件上。

例子5:獲取滑鼠點選次數

using UnityEngine;
using UnityEngine.EventSystems;

public class ClickCount : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("點選次數:" + eventData.clickCount);
    }
}

操作步驟:

  1. 建立一個按鈕,並將指令碼掛載到該按鈕上。
  2. 連續點選按鈕,檢視控制檯輸出的點選次數。

注意事項:

  • 需要將指令碼掛載到Button元件上,以便接收滑鼠點選事件。

參考資料