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

    xiaoxiao2021-12-14  25

    #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;             }         }     } }
    转载请注明原文地址: https://ju.6miu.com/read-970295.html

    最新回复(0)