Unity UGUI事件接口概述


  UGUI 系統雖然提供了很多封裝好的組件,但是要實現一些特定的功能還是顯得非常有限,這時候就需要使用事件接口來完成UI功能的實現。比如我們想實現鼠標移動到圖片上時自動顯示圖片的文字介紹,一般思路會想到寫個射線來檢測,但其實這樣的檢測UGUI已經替我們完成了,我們只需要實現檢測到目標對象后所要執行的代碼即可!
  UI 組件都是基於 UGUI 封裝好的類和接口以及一些 Editor 文件來進行封裝制作供開發者使用的,開發者利用這些封裝好的工具,只需更專注於功能開發即可。UGUI 的代碼是開源的,開發者可以查閱 UGUI 系統的具體細節來進行更深入的學習。UGUI 源碼傳送門:Unity-Technologies/UI
  Unity官方也為開發者提供了很多完整的案例,可以在 Assets Store上進行下載,搜索“Unity Samples: UI”。

【接口介紹】

命名空間:using UnityEngine.EventSystems;

IPointerEnterHandler

該接口實現方法如下:

public void OnPointerEnter(PointerEventData eventData)
{
    //當鼠標光標移入該對象時觸發
}

IPointerExitHandler

該接口實現方法如下:

public void OnPointerExit(PointerEventData eventData)
{
    //當鼠標光標移出該對象時觸發
}

IPointerDownHandler

該接口實現方法如下:

public void OnPointerDown(PointerEventData eventData)
{
    //鼠標點擊A對象,按下鼠標時A對象響應此事件
}

IPointerUpHandler

該接口實現方法如下:

public void OnPointerUp(PointerEventData eventData)
{
    //鼠標點擊A對象,抬起鼠標時響應
    //無論鼠標在何處抬起(即不在A對象中)
    //都會在A對象中響應此事件
    //注:響應此事件的前提是A對象必須響應過OnPointerDown事件
    Debug.Log("OnPointerUp " + name);
}

IPointerClickHandler

該接口實現方法如下:

public void OnPointerClick(PointerEventData eventData)
{
    //鼠標點擊A對象,抬起鼠標時A對象響應此事件
    //注:按下和抬起時鼠標要處於同一對象上
}

IDragHandler

該接口實現方法如下:

public void OnDrag(PointerEventData eventData)
{
    //當鼠標在A對象按下並拖拽時 A對象每幀響應一次此事件
    //注:如果不實現此接口,則后面的四個接口方法都不會觸發
    Debug.Log("OnDrag " + name);

    if (Input.GetMouseButton(0))
    {
        //拖拽移動圖片
        SetDraggedPosition(eventData);
    }
}
private void SetDraggedPosition(PointerEventData eventData)
{
    var rt = gameObject.GetComponent<RectTransform>();
    Vector3 globalMousePos;
     if(RectTransformUtility.ScreenPointToWorldPointInRectangle(rt,eventData.position, eventData.pressEventCamera, out globalMousePos))
    {
        rt.position = globalMousePos;
    }
}

IInitializePotentialDragHandler

該接口實現方法如下:

public void OnInitializePotentialDrag(PointerEventData eventData)
{
    //當鼠標在A對象按下還沒開始拖拽時 A對象響應此事件
    //注:此接口事件與IPointerDownHandler接口事件類似
    // 二者的執行順序:先執行IPointerDownHandler,然后執行此接口事件
    Debug.Log("OnInitializePotentialDrag " + name);
}

IBeginDragHandler

該接口實現方法如下:

public void OnBeginDrag(PointerEventData eventData)
{
    //當鼠標在A對象按下並開始拖拽時 A對象響應此事件
    // 此事件在OnInitializePotentialDrag之后響應 OnDrag之前響應
    Debug.Log("OnBeginDrag " + name);
}

IEndDragHandler

該接口實現方法如下:

public void OnEndDrag(PointerEventData eventData)
{
    //當鼠標抬起時 A對象響應此事件
    Debug.Log("OnEndDrag " + name);
}

IDropHandler

該接口實現方法如下:

public void OnDrop(PointerEventData eventData)
{
    //A、B對象必須均實現IDropHandler接口,且A至少實現IDragHandler接口
    //當鼠標從A對象上開始拖拽,在B對象上抬起時 B對象響應此事件
    //此時name獲取到的是B對象的name屬性
    //eventData.pointerDrag表示發起拖拽的對象(GameObject)
    Debug.Log(eventData.pointerDrag.name + " OnDrop to " + name);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM