Unity 判斷鼠標上下左右拖動

很簡單,直接上代碼,解釋都在註釋中。

public class InputController:MonoBehaviour,IPointerDownHandler,IDragHandler,IPointerUpHandler
    {
        private float fingerActionSensitivity = Screen.width * 0.05f; //手指動作的敏感度,這裏設定爲 二十分之一的屏幕寬度.

        private float fingerBeginX;
        private float fingerBeginY;
        private float fingerCurrentX;
        private float fingerCurrentY;
        private float fingerSegmentX;
        private float fingerSegmentY;

        private int fingerTouchState;

        //三種狀態
        private int state_null = 0;
        private int state_touch = 1;
        private int state_add = 2;

        void Start()
        {
            fingerBeginX = 0;
            fingerBeginY = 0;
            fingerCurrentX = 0;
            fingerCurrentY = 0;
            fingerSegmentX = 0;
            fingerSegmentY = 0;

            fingerTouchState = state_null;
        }
        public void OnPointerDown(PointerEventData eventData)
        {
            if (fingerTouchState == state_null)
            {
                fingerTouchState = state_touch;
                fingerBeginX = Input.mousePosition.x;
                fingerBeginY = Input.mousePosition.y;
            }
        }

        public void OnDrag(PointerEventData eventData)
        {
            if (fingerTouchState != state_touch) return;

            fingerCurrentX = Input.mousePosition.x;
            fingerCurrentY = Input.mousePosition.y;
            fingerSegmentX = fingerCurrentX - fingerBeginX; //計算左右拖動的長度
            fingerSegmentY = fingerCurrentY - fingerBeginY; //計算上下拖動的長度

            //這邊計算你需要拖動的範圍纔算拖動了
            float fingerDistance = fingerSegmentX * fingerSegmentX + fingerSegmentY * fingerSegmentY;

            if (fingerDistance > (fingerActionSensitivity * fingerActionSensitivity))
            {
                ToAddFingerAction();
            }
        }

        public void OnPointerUp(PointerEventData eventData)
        {
            fingerTouchState = state_null;
        }

        void ToAddFingerAction()
        {
            fingerTouchState = state_add;

            //判斷是左右還是上下,通過設置對立的參數爲0進行判斷,
            if (Mathf.Abs(fingerSegmentX) > Mathf.Abs(fingerSegmentY)) 
            {
                fingerSegmentY = 0;
            }
            else
            {
                fingerSegmentX = 0;
            }

            // fingerSegmentX=0 則是上下拖動
            if (fingerSegmentX == 0)
            {
                if (fingerSegmentY > 0)
                {
                    Debug.Log("up");
                }
                else
                {
                    Debug.Log("down");
                }
            }
            else if (fingerSegmentY == 0)
            {
                if (fingerSegmentX > 0)
                {
                    Debug.Log("right");
                }
                else
                {
                    Debug.Log("left");
                }
            }
        }
    }

每天進步一點點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章