InputTouchContorler.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. using UnityEngine;
  2. using System.Collections;
  3. using System;
  4. using System.Collections.Generic;
  5. using UnityEngine.EventSystems;
  6. /// <summary>
  7. ///
  8. /// </summary>
  9. public class InputTouchContorler : MonoBehaviour
  10. {
  11. /////// <summary>
  12. /////// 玩家的邮件系统发生变化
  13. /////// </summary>
  14. ////public System.EventHandler OnChangeAnimationEvent;
  15. // Use this for initialization
  16. private void Start()
  17. {
  18. Input.multiTouchEnabled = true;
  19. }
  20. #region 点击更改动作/ 拖拽,移动显示位置/ 手指操作,缩放人物大小
  21. /// <summary>
  22. ///
  23. /// </summary>
  24. private float touchMoveDistance = 800.0f;
  25. //距离最值
  26. private float MaxCameraSize = 15;
  27. /// <summary>
  28. ///
  29. /// </summary>
  30. private float MinCameraSize = 5;
  31. /// <summary>
  32. ///
  33. /// </summary>
  34. private float DefaultCameraSize = 13;
  35. /// <summary>
  36. ///
  37. /// </summary>
  38. private ETouchState curTouch_NumOperateState = ETouchState.Null;
  39. /// <summary>
  40. ///
  41. /// </summary>
  42. private float CurCameraSize = 13;
  43. /// <summary>
  44. /// 缩放的进度值
  45. /// </summary>
  46. private float lastMulityTouch_MoveMagnitude = 0.0f;
  47. //当前手势
  48. private Vector2 lastMulityTouch_MoveDir;
  49. /////// <summary>
  50. /////// 上次单点触控的操作类型
  51. /////// </summary>
  52. ////private string lastSingleTouch_PhaseName = string.Empty;
  53. /// <summary>
  54. /// 上次单点触控的鼠标位置
  55. /// </summary>
  56. private Vector2 lastSingleTouch_Position = Vector2.zero;
  57. /// <summary>
  58. /// 上次触控操作的 手指数量
  59. /// </summary>
  60. private ETouchState lastTouch_NumOperateState = ETouchState.Null;
  61. /// <summary>
  62. /// 是否开启缩放操作监控
  63. /// </summary>
  64. public bool IsEnterScaleHeroOperate = false;
  65. /// <summary>
  66. /// 是否开启拖拽操作监控
  67. /// </summary>
  68. public bool IsEnterDragHeroOperate = false;
  69. /// <summary>
  70. ///
  71. /// </summary>
  72. private void Update()
  73. {
  74. if (!DragonBonesBGControler.Instance().CheckIsOpenTouchOperatehero())
  75. {
  76. return;
  77. }
  78. //多点触控
  79. if (Input.touchCount > 1)
  80. {
  81. ////lastSingleTouch_PhaseName = string.Empty;
  82. curTouch_NumOperateState = ETouchState.two;
  83. if (lastTouch_NumOperateState != curTouch_NumOperateState)
  84. {
  85. lastTouch_NumOperateState = curTouch_NumOperateState;
  86. }
  87. //停止拖拽 移动位置操作
  88. IsEnterScaleHeroOperate = true;
  89. ////两只手指都处于移动状态
  90. if (Input.touches[0].phase == TouchPhase.Moved || Input.touches[1].phase == TouchPhase.Moved)
  91. {
  92. ////计算移动方向
  93. Vector2 mDir = Input.touches[1].position - Input.touches[0].position;
  94. if (lastMulityTouch_MoveMagnitude < 0.1f)
  95. {
  96. lastMulityTouch_MoveMagnitude = mDir.magnitude;
  97. return;
  98. }
  99. float temp = 5.0f * (Mathf.Abs(lastMulityTouch_MoveMagnitude - mDir.magnitude) / touchMoveDistance);
  100. ////LogHelper.LogError("qqwang!!!! CurCameraSize::" + CurCameraSize + " touchDis::" + mDir.magnitude + "lastDis::" + lastMulityTouch_MoveMagnitude + "/// chazhi::" + temp);
  101. ////根据向量的大小判断当前手势是放大还是缩小
  102. if (mDir.sqrMagnitude > lastMulityTouch_MoveDir.sqrMagnitude)
  103. {
  104. ////CurCameraSize -= speed;
  105. CurCameraSize -= temp;
  106. }
  107. else
  108. {
  109. ////CurCameraSize += speed;
  110. CurCameraSize += temp;
  111. }
  112. ////更新当前手势
  113. lastMulityTouch_MoveDir = mDir;
  114. lastMulityTouch_MoveMagnitude = mDir.magnitude;
  115. ////限制距离
  116. CurCameraSize = Mathf.Clamp(CurCameraSize, MinCameraSize, MaxCameraSize);
  117. }
  118. }
  119. else if (Input.touchCount == 1)
  120. {
  121. lastMulityTouch_MoveDir = Vector2.zero;
  122. lastMulityTouch_MoveMagnitude = 0;
  123. IsEnterScaleHeroOperate = false;
  124. curTouch_NumOperateState = ETouchState.single;
  125. if (lastTouch_NumOperateState == ETouchState.two)
  126. {
  127. lastSingleTouch_Position = Input.touches[0].position;
  128. lastTouch_NumOperateState = ETouchState.single;
  129. return;
  130. }
  131. else
  132. {
  133. if (lastTouch_NumOperateState != curTouch_NumOperateState)
  134. {
  135. lastTouch_NumOperateState = curTouch_NumOperateState;
  136. }
  137. }
  138. switch (Input.GetTouch(0).phase)
  139. {
  140. case TouchPhase.Began:
  141. lastSingleTouch_Position = Input.touches[0].position;
  142. ////lastSingleTouch_PhaseName = Input.GetTouch(0).phase.ToString();
  143. break;
  144. case TouchPhase.Moved:
  145. case TouchPhase.Stationary:
  146. Vector2 delta = Input.touches[0].position - lastSingleTouch_Position;
  147. if (delta.sqrMagnitude > 0)
  148. {
  149. IsEnterDragHeroOperate = true;
  150. ////lastSingleTouch_PhaseName = Input.GetTouch(0).phase.ToString();
  151. ////当前手势 是 拖拽操作
  152. ////LogHelper.LogError("qqwang!!!! Input.touchCount==1 》》》Pos:" + Input.touches[0].position + ">>> delta::" + delta.ToString());
  153. lastSingleTouch_Position = Input.touches[0].position;
  154. ////更改拖拽的位置
  155. DragonBonesBGControler.Instance().OnChangeModelPosition(delta);
  156. }
  157. break;
  158. case TouchPhase.Ended:
  159. case TouchPhase.Canceled:
  160. IsEnterDragHeroOperate = false;
  161. ////if (lastSingleTouch_PhaseName == TouchPhase.Began.ToString())
  162. ////{
  163. ////if (OnChangeAnimationEvent != null)
  164. ////{
  165. //// OnChangeAnimationEvent.Invoke(null, EventArgs.Empty);
  166. ////}
  167. ////}
  168. break;
  169. }
  170. }
  171. else
  172. {
  173. lastMulityTouch_MoveMagnitude = 0;
  174. lastMulityTouch_MoveDir = Vector2.zero;
  175. lastSingleTouch_Position = Vector2.zero;
  176. ////lastSingleTouch_PhaseName = string.Empty;
  177. lastTouch_NumOperateState = ETouchState.Null;
  178. IsEnterDragHeroOperate = false;
  179. IsEnterScaleHeroOperate = false;
  180. }
  181. if (IsEnterScaleHeroOperate)
  182. {
  183. ////计算相机的角度和位置
  184. //通知去更改相机的scale
  185. DragonBonesBGControler.Instance().OnChangeCameraSize(CurCameraSize);
  186. }
  187. }
  188. #endregion
  189. public void Reset()
  190. {
  191. lastMulityTouch_MoveMagnitude = 0;
  192. lastMulityTouch_MoveDir = Vector2.zero;
  193. lastSingleTouch_Position = Vector2.zero;
  194. ////lastSingleTouch_PhaseName = string.Empty;
  195. lastTouch_NumOperateState = ETouchState.Null;
  196. IsEnterScaleHeroOperate = false;
  197. IsEnterDragHeroOperate = false;
  198. CurCameraSize = DefaultCameraSize;
  199. }
  200. }
  201. public class ControlerWindowdData
  202. {
  203. public string windowName;
  204. public bool controle;
  205. }
  206. public enum ETouchState
  207. {
  208. single,
  209. two,
  210. Null
  211. }