Unity 手势左右上下滑 放大缩小

#if UNITY_ANDROID && !UNITY_EDITOR
#define ANDROID
#endif
 
 
#if UNITY_IPHONE && !UNITY_EDITOR
#define IPHONE
#endif


using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;


namespace CombatGesture {


    public class TouchPanel : MonoBehaviour{


        public float xOffset = 1;
        public float yOffset = 1;
        public float changeOffset = 10;




        public GameObject targetObj = null;


        protected TouchEvent touchEvent;


        private bool mBoolLeft = false;
        private bool mBoolRight = false;


        bool oneBool;


        private Vector2 mFirstPos = Vector2.zero;//第一次
        private Vector2 mSecondPos = Vector2.zero;//第二次


        private Vector2 mOldPosition1 = new Vector2(0, 0);
        private Vector2 mOldPosition2 = new Vector2(0, 0);


        private float mOldDistance = 0f;
        private float mNewDistance = 0f;


        public Text text;
        public Text text2;
        public Text text3;
        public Text text4;


        private bool mBoolEnlage = false;
        private bool mBoolDiminish = false;


        private Vector2 tempPosition1;
        private Vector2 tempPosition2;






        void Start() {
            touchEvent = new TouchEvent();
        }


        void Update()
        {
            //#if IPHONE || ANDROID
            if (Input.touchCount == 1)
            {
                if (Input.GetTouch(0).phase == TouchPhase.Began)
                {
                    if (Input.GetTouch(0).phase == TouchPhase.Stationary)
                    {
                        Ray ray = Camera.main.ScreenPointToRay(new Vector3(Input.GetTouch(0).position.x, Input.GetTouch(0).position.y, 0));
                        RaycastHit hit;
                        if (Physics.Raycast(ray, out hit))
                        {
                            RayCast(hit);
                        }
                        else
                        {
                            touchEvent.OnPress();
                        }
                    }
                }
            }
            else
            {


            }




            //2016年12月2日 by qc
                text4.text = Input.touches.Length.ToString();


                if (Input.touchCount < 1)
                {
                    oneBool = true;
                }


                    OneFingerTouch();
               
                    MoreFingerTouch();
              
                //#else
                //              if (Input.GetMouseButtonDown(0)) {
                //    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                //    RaycastHit hit;
                //    if (Physics.Raycast(ray, out hit)) {
                //        RayCast(hit);
                //    }else {
                //        touchEvent.OnPress();
                //    }
                //}


                 //鼠标 左右滑动 2016年12月1日 by qc
                 //if (Input.GetMouseButtonDown(0))
                 //{
                 //    mFirstPos = Input.mousePosition;
                 //    mBoolLeft = true;
                 //}
                 //if (Input.GetMouseButtonUp(0))
                 //{
                 //    mSecondPos = Input.mousePosition;
                 //    mBoolRight = true;
                 //}
                 //if (mBoolLeft && mBoolRight)
                 //{
                 //    if (mSecondPos.x < mFirstPos.x)
                 //        touchEvent.OnLeftTouch(mSecondPos.x - mFirstPos.x);


                 //    if (mSecondPos.x > mFirstPos.x)
                 //        touchEvent.OnRightTouch(mSecondPos.x - mFirstPos.x);


                 //    if (mSecondPos.y > mFirstPos.y)
                 //        touchEvent.OnUpTouch(mSecondPos.y - mFirstPos.y);


                 //    if (mSecondPos.y < mFirstPos.y)
                 //        touchEvent.OnDownTouch(mSecondPos.y - mFirstPos.y);


                 //    mBoolLeft = false;
                 //    mBoolRight = false;
                 //}
                  
                // #endif
        }


        private void RayCast(RaycastHit hit) {
            if (!EventSystem.current.IsPointerOverGameObject()) {
                touchEvent.OnPress(hit.collider.transform.root.gameObject);
            }
        }


        void OneFingerTouch()
        {
            if (1 == Input.touchCount && oneBool)
            {
                    //if (Input.GetTouch(0).phase == TouchPhase.Moved)
                    //{
                    //if (Input.GetTouch(0).phase == TouchPhase.Moved)
                    //{
                    //    if (Input.GetTouch(0).deltaPosition.x > 20f)
                    //        text.text = "我右侧滑动了";
                    //    else if (Input.GetTouch(0).deltaPosition.x < -20f)
                    //        text.text = "我左侧滑动了";
                    //}


                    if (Input.GetTouch(0).phase == TouchPhase.Began)
                    {
                        mFirstPos = Input.GetTouch(0).position;
                        mSecondPos = Input.GetTouch(0).position;
                        mBoolLeft = true;
                    }


                    if (Input.GetTouch(0).phase == TouchPhase.Ended)
                    {
                        mBoolRight = true;
                    }


                    mSecondPos = Input.GetTouch(0).position;


                    if (mBoolLeft && mBoolRight)
                    {
                        float xMoveDistance = Mathf.Abs(mSecondPos.x - mFirstPos.x);
                        float yMoveDistance = Mathf.Abs(mSecondPos.y - mFirstPos.y);


                        if (xMoveDistance > yMoveDistance)
                        {
                            if (mSecondPos.x - mFirstPos.x < -xOffset)
                            {
                                text.text = "我左侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
                                // touchEvent.OnLeftTouch(mSecondPos.x - mFirstPos.x);
                            }
                            else if (mSecondPos.x - mFirstPos.x > xOffset)
                            {
                                text.text = "我右侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
                                // touchEvent.OnRightTouch(mSecondPos.x - mFirstPos.x);
                            }
                        }
                        else
                        {
                            if (mSecondPos.y - mFirstPos.y < -yOffset)
                            {
                                text3.text = "我下滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
                                touchEvent.OnDownTouch(mSecondPos.y - mFirstPos.y);
                            }
                            else if (mSecondPos.y - mFirstPos.y > yOffset)
                            {
                                text3.text = "我上滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
                                touchEvent.OnUpTouch(mSecondPos.y - mFirstPos.y);
                            }
                        }
                    }
            }


            /*  #region 2、实时变化
             * 
             *    if (Input.GetTouch(0).phase == TouchPhase.Began)
                {
                    mFirstPos = Input.GetTouch(0).position;
                    mSecondPos = Input.GetTouch(0).position;
                    mBoolLeft = true;
                }


                if (Input.GetTouch(0).phase == TouchPhase.Ended)
                {
                    mBoolRight = true;
                    mFirstPos = Input.GetTouch(0).position;
                    mSecondPos = Input.GetTouch(0).position;
                }
                            if (Input.GetTouch(0).phase == TouchPhase.Moved)
                            {
                                mSecondPos = Input.GetTouch(0).position;


                                float xMoveDistance = Mathf.Abs(mSecondPos.x - mFirstPos.x);
                                float yMoveDistance = Mathf.Abs(mSecondPos.y - mFirstPos.y);


                                if (xMoveDistance > yMoveDistance)
                                {
                                    if (mSecondPos.x - mFirstPos.x < -xOffset)
                                    {
                                        text.text = "我左侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
                                        // touchEvent.OnLeftTouch(mSecondPos.x - mFirstPos.x);
                                    }
                                    else if (mSecondPos.x - mFirstPos.x > xOffset)
                                    {
                                        text.text = "我右侧滑动了" + (mSecondPos.x - mFirstPos.x).ToString();
                                        // touchEvent.OnRightTouch(mSecondPos.x - mFirstPos.x);
                                    }
                                }
                                else
                                {
                                    if (mSecondPos.y - mFirstPos.y < -yOffset)
                                    {
                                        text3.text = "我下滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
                                        // touchEvent.OnDownTouch(mSecondPos.y - mFirstPos.y);
                                    }
                                    else if (mSecondPos.y - mFirstPos.y > yOffset)
                                    {
                                        text3.text = "我上滑动了" + (mSecondPos.y - mFirstPos.y).ToString();
                                        //touchEvent.OnUpTouch(mSecondPos.y - mFirstPos.y);
                                    }
                                }
                                mFirstPos = mSecondPos;
                            }
                        }


             * #endregion  */
        }


       


       
        void MoreFingerTouch()
        {
            if (Input.touchCount > 1)
            {
                           // 用手指按下 手指抬起 判断
                //        // if(Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved)
                //        //{
                //        if (Input.GetTouch(0).phase == TouchPhase.Began || Input.GetTouch(1).phase == TouchPhase.Began)
                //        {
                //            mOldPosition1 = Input.GetTouch(0).position;
                //            mOldPosition2 = Input.GetTouch(1).position;
                //            mBoolEnlage = true;
                //        }


                //        if (Input.GetTouch(0).phase == TouchPhase.Ended || Input.GetTouch(1).phase == TouchPhase.Ended)
                //        {
                //            mBoolDiminish = true;
                //        }


                //        tempPosition1 = Input.GetTouch(0).position;
                //        tempPosition2 = Input.GetTouch(1).position;


                //        if (mBoolEnlage && mBoolDiminish)
                //        {
                //            float leng1 = Mathf.Sqrt((mOldPosition1.x - mOldPosition2.x) * (mOldPosition1.x - mOldPosition2.x) + (mOldPosition1.y - mOldPosition2.y) * (mOldPosition1.y - mOldPosition2.y));
                //            float leng2 = Mathf.Sqrt((tempPosition1.x - tempPosition2.x) * (tempPosition1.x - tempPosition2.x) + (tempPosition1.y - tempPosition2.y) * (tempPosition1.y - tempPosition2.y));


                //            if (leng1 - leng2 < -changeOffset)
                //            {
                //                // 放大手势  
                //                text2.text = "我放大了";
                //                touchEvent.OnEnlargeTouch(leng1 - leng2);
                //                mBoolEnlage = false;
                //                mBoolDiminish = false;
                //            }
                //            else if (leng1 - leng2 > changeOffset)
                //            {
                //                // 缩小手势  
                //                text2.text = "我缩小了";
                //                touchEvent.OnDiminishTouch(leng1 - leng2);


                //                mBoolEnlage = false;
                //                mBoolDiminish = false;
                //            }
                //        }


                //实时变大变小
                if (Input.GetTouch(0).phase == TouchPhase.Began || Input.GetTouch(1).phase == TouchPhase.Began)
                {
                    mOldPosition1 = Input.GetTouch(0).position;
                    mOldPosition2 = Input.GetTouch(1).position;
                }


                if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
                {
                    Vector2 tempPosition1 = Input.GetTouch(0).position;
                    Vector2 tempPosition2 = Input.GetTouch(1).position;


                    float leng1 = Mathf.Sqrt((mOldPosition1.x - mOldPosition2.x) * (mOldPosition1.x - mOldPosition2.x) + (mOldPosition1.y - mOldPosition2.y) * (mOldPosition1.y - mOldPosition2.y));
                    float leng2 = Mathf.Sqrt((tempPosition1.x - tempPosition2.x) * (tempPosition1.x - tempPosition2.x) + (tempPosition1.y - tempPosition2.y) * (tempPosition1.y - tempPosition2.y));


                    if (leng1 - leng2 < -changeOffset)
                    {
                        // 放大手势  
                        text2.text = "我放大了";
                        targetObj.transform.localScale += targetObj.transform.localScale * Time.deltaTime;
                    }
                    else if (leng1 - leng2 > changeOffset)
                    {
                        // 缩小手势  
                        text2.text = "我缩小了";
                        targetObj.transform.localScale -= targetObj.transform.localScale * Time.deltaTime;
                        //targetObj.transform.localScale
                    }


                    mOldPosition1 = tempPosition1;
                    mOldPosition2 = tempPosition2;
                }
                oneBool = false;
            }
        }
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值