当前位置:   article > 正文

Unity触屏操作 (主要是解决多点触 屏问题)_unity触摸屏

unity触摸屏
  1)、声明允许多点触屏
  2)判断手指触摸到屏幕的位置
  3)判断手指触摸到屏幕的数目
    input.touchCount =0
      return
    input.touchCount =1
      我们让其来做点事: (移动摄像机左右移动)
        1)用phase来判断触碰的状态
          Began:表示手指已触摸屏幕
          Move:手指在屏幕上移动
          End:手指从屏幕上移开。这是一个触摸的最后状态
          Canceled:系统取消跟踪触摸,如用户把屏幕放到 他脸上或超过五个接触同时发生。这是一个触摸 的最后状态。
          Stationary:手指触摸屏幕,但并没有移动。
        2)当判断Input.touches[0].phase ==TouchesPhase.Began
          用一个Verctor2记录下Input.touches[0].position
        3)当判断Input.touches[0].phase == TouchesPhase.Move
          此时就可用来移动主摄像机了 Camin.main.tranform.translate(new Verctor3(Input.touches[0].position.x*Time.deltaTime, Input.touches[0].position.y*Time.deltaTime,0))

    input.touchCount>1


      我们让其来做点事 移动摄像机的Z轴控制 远近,而达到物体放大 缩小的目的
        1、定义变量来储存两个touchCount的开始位置 与所移动的距离
          Vector2 finger1 = new Vector2()
      Vector2 finger2 = new Vector2()
          Vector2 mov1 = new Vector2()
          Vector2 mov2 = new Vector2()
        2、想像一个我们划动屏幕的动作 我们的两个手指放下后一般会一个 手指定住,一个手指移动来放大, 当然也会有两个手指都移动,但我 们只取这种状态来作判断即可
          在一个for循环里定义一个touch类型变量来 接收Input.touches[i]
            1、对touch.phase作判断 如果touch.phase ==touches.Ended 则break
            2对touch.phase作判断 如果touch.phase ==touches.Move
              0、定议一个floa mov 来接收最终经过判断所移动的值
                mov = move.x+move.y
              1、for循环作一个判断i==1时对finger1、mov1、赋值
              2、else里对finger2、mov2赋值,并对比较finger1与finger2的X、Y

            其实无论touchCount的数目是多少 我们都只取两个点来做判断即可


以下插入总体源码(这个与上面所讲有点不同,这个直接挂在与要旋转放大缩小的物体上)

  1. using UnityEngine;
  2. using System.Collections;
  3. public class mobileChane : MonoBehaviour {
  4. // Use this for initialization
  5. private float mx;
  6. private float my;
  7. private float xSpeed =3;
  8. private float ySpeed =3;
  9. private Vector2 start;
  10. private Quaternion mRoation;
  11. void Start () {
  12. Input.multiTouchEnabled = true;
  13. }
  14. // Update is called once per frame
  15. void Update () {
  16. MoblieInput();
  17. }
  18. void MoblieInput()
  19. {
  20. if(Input.touchCount ==0 )
  21. {
  22. return;
  23. }
  24. if(Input.touchCount ==1)
  25. {
  26. if(Input.touches[0].phase ==TouchPhase.Began)
  27. {
  28. start = Input.touches[0].position;
  29. }
  30. if(Input.touches[0].phase ==TouchPhase.Moved)
  31. {
  32. mx += Input.touches[0].deltaPosition.x * xSpeed;
  33. my += Input.touches[0].deltaPosition.y * ySpeed; ;
  34. }
  35. mRoation = Quaternion.Euler(mx, my, 0);
  36. transform.rotation = mRoation;
  37. }
  38. else if(Input.touchCount>1)
  39. {
  40. Vector2 finger1 = new Vector2();
  41. Vector2 finger2 = new Vector2();
  42. Vector2 mov1 = new Vector2();
  43. Vector2 mov2 = new Vector2();
  44. // Vector2 mov = new Vector2();
  45. for(int i = 0;i<2;i++)
  46. {
  47. Touch touch = Input.touches[i];
  48. if(touch.phase == TouchPhase.Ended)
  49. {
  50. break;
  51. }
  52. if(touch.phase == TouchPhase.Moved)
  53. {
  54. float mov = 0;
  55. if(i==0)
  56. {
  57. finger1 = touch.position;
  58. mov1 = touch.deltaPosition;
  59. }
  60. else
  61. {
  62. finger2 = touch.position;
  63. finger2 = touch.deltaPosition;
  64. //开始做移动判断
  65. if(finger1.x>finger2.x)
  66. {
  67. mov = mov1.x;
  68. }
  69. else
  70. {
  71. mov = mov2.x;
  72. }
  73. if(finger1.y >finger2.y)
  74. {
  75. mov += mov1.y;
  76. }
  77. else
  78. {
  79. mov += mov2.y;
  80. }
  81. }
  82. Camera.main.transform.Translate(0, 0, mov * Time.deltaTime);//主要通过控制主摄像的远近来放大缩小
  83. }
  84. }
  85. }
  86. }
  87. }



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/253765
推荐阅读
相关标签
  

闽ICP备14008679号