using UnityEngine; using System.Collections; using System; using System.Collections.Generic; using UnityEngine.EventSystems; /// /// /// public class InputTouchContorler : MonoBehaviour { /////// /////// 玩家的邮件系统发生变化 /////// ////public System.EventHandler OnChangeAnimationEvent; // Use this for initialization private void Start() { Input.multiTouchEnabled = true; } #region 点击更改动作/ 拖拽,移动显示位置/ 手指操作,缩放人物大小 /// /// /// private float touchMoveDistance = 800.0f; //距离最值 private float MaxCameraSize = 15; /// /// /// private float MinCameraSize = 5; /// /// /// private float DefaultCameraSize = 13; /// /// /// private ETouchState curTouch_NumOperateState = ETouchState.Null; /// /// /// private float CurCameraSize = 13; /// /// 缩放的进度值 /// private float lastMulityTouch_MoveMagnitude = 0.0f; //当前手势 private Vector2 lastMulityTouch_MoveDir; /////// /////// 上次单点触控的操作类型 /////// ////private string lastSingleTouch_PhaseName = string.Empty; /// /// 上次单点触控的鼠标位置 /// private Vector2 lastSingleTouch_Position = Vector2.zero; /// /// 上次触控操作的 手指数量 /// private ETouchState lastTouch_NumOperateState = ETouchState.Null; /// /// 是否开启缩放操作监控 /// public bool IsEnterScaleHeroOperate = false; /// /// 是否开启拖拽操作监控 /// public bool IsEnterDragHeroOperate = false; /// /// /// private void Update() { if (!DragonBonesBGControler.Instance().CheckIsOpenTouchOperatehero()) { return; } //多点触控 if (Input.touchCount > 1) { ////lastSingleTouch_PhaseName = string.Empty; curTouch_NumOperateState = ETouchState.two; if (lastTouch_NumOperateState != curTouch_NumOperateState) { lastTouch_NumOperateState = curTouch_NumOperateState; } //停止拖拽 移动位置操作 IsEnterScaleHeroOperate = true; ////两只手指都处于移动状态 if (Input.touches[0].phase == TouchPhase.Moved || Input.touches[1].phase == TouchPhase.Moved) { ////计算移动方向 Vector2 mDir = Input.touches[1].position - Input.touches[0].position; if (lastMulityTouch_MoveMagnitude < 0.1f) { lastMulityTouch_MoveMagnitude = mDir.magnitude; return; } float temp = 5.0f * (Mathf.Abs(lastMulityTouch_MoveMagnitude - mDir.magnitude) / touchMoveDistance); ////LogHelper.LogError("qqwang!!!! CurCameraSize::" + CurCameraSize + " touchDis::" + mDir.magnitude + "lastDis::" + lastMulityTouch_MoveMagnitude + "/// chazhi::" + temp); ////根据向量的大小判断当前手势是放大还是缩小 if (mDir.sqrMagnitude > lastMulityTouch_MoveDir.sqrMagnitude) { ////CurCameraSize -= speed; CurCameraSize -= temp; } else { ////CurCameraSize += speed; CurCameraSize += temp; } ////更新当前手势 lastMulityTouch_MoveDir = mDir; lastMulityTouch_MoveMagnitude = mDir.magnitude; ////限制距离 CurCameraSize = Mathf.Clamp(CurCameraSize, MinCameraSize, MaxCameraSize); } } else if (Input.touchCount == 1) { lastMulityTouch_MoveDir = Vector2.zero; lastMulityTouch_MoveMagnitude = 0; IsEnterScaleHeroOperate = false; curTouch_NumOperateState = ETouchState.single; if (lastTouch_NumOperateState == ETouchState.two) { lastSingleTouch_Position = Input.touches[0].position; lastTouch_NumOperateState = ETouchState.single; return; } else { if (lastTouch_NumOperateState != curTouch_NumOperateState) { lastTouch_NumOperateState = curTouch_NumOperateState; } } switch (Input.GetTouch(0).phase) { case TouchPhase.Began: lastSingleTouch_Position = Input.touches[0].position; ////lastSingleTouch_PhaseName = Input.GetTouch(0).phase.ToString(); break; case TouchPhase.Moved: case TouchPhase.Stationary: Vector2 delta = Input.touches[0].position - lastSingleTouch_Position; if (delta.sqrMagnitude > 0) { IsEnterDragHeroOperate = true; ////lastSingleTouch_PhaseName = Input.GetTouch(0).phase.ToString(); ////当前手势 是 拖拽操作 ////LogHelper.LogError("qqwang!!!! Input.touchCount==1 》》》Pos:" + Input.touches[0].position + ">>> delta::" + delta.ToString()); lastSingleTouch_Position = Input.touches[0].position; ////更改拖拽的位置 DragonBonesBGControler.Instance().OnChangeModelPosition(delta); } break; case TouchPhase.Ended: case TouchPhase.Canceled: IsEnterDragHeroOperate = false; ////if (lastSingleTouch_PhaseName == TouchPhase.Began.ToString()) ////{ ////if (OnChangeAnimationEvent != null) ////{ //// OnChangeAnimationEvent.Invoke(null, EventArgs.Empty); ////} ////} break; } } else { lastMulityTouch_MoveMagnitude = 0; lastMulityTouch_MoveDir = Vector2.zero; lastSingleTouch_Position = Vector2.zero; ////lastSingleTouch_PhaseName = string.Empty; lastTouch_NumOperateState = ETouchState.Null; IsEnterDragHeroOperate = false; IsEnterScaleHeroOperate = false; } if (IsEnterScaleHeroOperate) { ////计算相机的角度和位置 //通知去更改相机的scale DragonBonesBGControler.Instance().OnChangeCameraSize(CurCameraSize); } } #endregion public void Reset() { lastMulityTouch_MoveMagnitude = 0; lastMulityTouch_MoveDir = Vector2.zero; lastSingleTouch_Position = Vector2.zero; ////lastSingleTouch_PhaseName = string.Empty; lastTouch_NumOperateState = ETouchState.Null; IsEnterScaleHeroOperate = false; IsEnterDragHeroOperate = false; CurCameraSize = DefaultCameraSize; } } public class ControlerWindowdData { public string windowName; public bool controle; } public enum ETouchState { single, two, Null }