unityはクリックインタラクションのイベントとドラッグインタラクションのイベントをカプセル化する

3432 ワード

Unity EventSystemが提供する共通イベントインタフェースをカプセル化しました.
JPointerContainerクラス処理クリックのインタラクション
using GameUI.Components;
using System;
using UnityEngine.EventSystems;

namespace GameUI.Components
{
    /// 
    ///         
    /// 
    public class JPointerContainer : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IPointerEnterHandler, IPointerExitHandler, ISelectHandler, IDeselectHandler
    {
        //       
        public Action onPointerClick;
        public Action onPointerDown;
        public Action onPointerUp;
        public Action onPointerEnter;
        public Action onPointerExit;
        public Action onSelect;
        public Action onDeselect;


        public void OnPointerClick(PointerEventData eventData)
        {
            if (onPointerClick != null) onPointerClick(eventData);
        }

        public void OnPointerDown(PointerEventData eventData)
        {
            EventSystem.current.SetSelectedGameObject(gameObject, eventData);
            if (onPointerDown != null) onPointerDown(eventData);
        }

        public void OnPointerUp(PointerEventData eventData)
        {
            if (onPointerUp != null) onPointerUp(eventData);
        }

        public void OnPointerEnter(PointerEventData eventData)
        {
            if (onPointerEnter != null) onPointerEnter(eventData);
        }

        public void OnPointerExit(PointerEventData eventData)
        {
            if (onPointerExit != null) onPointerExit(eventData);
        }

        public void OnSelect(BaseEventData eventData)
        {
            if (onSelect != null) onSelect(eventData);
        }

        public void OnDeselect(BaseEventData eventData)
        {
            if (onDeselect != null) onDeselect(eventData);
        }

        void OnDestroy()
        {
            onPointerClick = null;
            onPointerDown = null;
            onPointerUp = null;
            onPointerEnter = null;
            onPointerExit = null;
            onSelect = null;
            onDeselect = null;
        }
    }
}

JDragContainerはドラッグのインタラクションを処理する
using GameUI.Components;
using System;
using UnityEngine.EventSystems;

namespace GameUI.Components
{
    /// 
    ///       
    /// 
    public class JDragContainer : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
    {
        public Action onBeginDrag;
        public Action onDrag;
        public Action onEndDrag;

        public void OnBeginDrag(PointerEventData eventData)
        {
            if (onBeginDrag != null) onBeginDrag(eventData);
        }

        public void OnDrag(PointerEventData eventData)
        {
            if (onDrag != null) onDrag(eventData);
        }

        public void OnEndDrag(PointerEventData eventData)
        {
            if (onEndDrag != null) onEndDrag(eventData);
        }

        void OnDestroy()
        {
            onBeginDrag = null;
            onDrag = null;
            onEndDrag = null;
        }
    }
}