zoukankan      html  css  js  c++  java
  • Unity实现手指滑屏

      我使用Input的Touch和EasyTouch各实现了滑屏方案,基本原理就是得到滑屏移动时的二维向量,通过向量获取究竟是向哪个方向滑动,通过自定义的状态来实现。下面上代码:

    下面是EasyTouch实现的:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public enum SwipeDir
     5 { 
     6     idle,   //没有滑动
     7     left,
     8     right,
     9     up,
    10     down
    11 }
    12 
    13 public class MyEasyTouch : MonoBehaviour 
    14 {
    15     [HideInInspector]
    16     public  SwipeDir swipeDir = SwipeDir.idle;
    17     Vector2 swipeVector;
    18 
    19     public bool isLeftSwipe = false;
    20     public bool isRightSwipe = false;
    21     public bool isUpSwipe = false;
    22     public bool isDownSwipe = false;
    23 
    24 
    25     void OnEnable()
    26     {
    27         //EasyTouch.On_Swipe += OnSwipe;
    28         EasyTouch.On_SwipeEnd += OnSwipe;
    29     }
    30 
    31     void OnDisable()
    32     {
    33         //EasyTouch.On_Swipe -= OnSwipe;
    34         EasyTouch.On_SwipeEnd -= OnSwipe;
    35  
    36 
    37     }
    38 
    39     void OnDestroy()
    40     {
    41         EasyTouch.On_SwipeEnd -= OnSwipe;
    42     }
    43 
    44     public void OnSwipe(Gesture gesture)
    45     {
    46         swipeVector = gesture.swipeVector;
    47         switch (GetCurrentSwipeDirection())
    48         { 
    49             case SwipeDir.left:
    50                 isLeftSwipe = true;
    51                 break;
    52             case SwipeDir.right:
    53                 isRightSwipe = true;
    54                 break;
    55             case SwipeDir.up:
    56                 isUpSwipe = true;
    57                 break;
    58             case SwipeDir.down:
    59                 isDownSwipe = true;
    60                 break;
    61 
    62         }
    63     }
    64 
    65     public SwipeDir GetCurrentSwipeDirection()
    66     {
    67         if (Mathf.Abs(swipeVector.x) > Mathf.Abs(swipeVector.y))
    68         {
    69             if (swipeVector.x > 0)
    70             {
    71                 return SwipeDir.right;
    72             }
    73             else if (swipeVector.x < 0)
    74             {
    75                 return SwipeDir.left;
    76             }
    77         }
    78         if (Mathf.Abs(swipeVector.x) < Mathf.Abs(swipeVector.y))
    79         {
    80             if (swipeVector.y > 0)
    81             {
    82                 return SwipeDir.up;
    83             }
    84             else if (swipeVector.y < 0)
    85             {
    86                 return SwipeDir.down;
    87             }
    88         }
    89 
    90         return SwipeDir.idle;
    91     }
    92 
    93 }
    MyEasyTouch

    下面是Unity自带的Touch类实现的:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 enum TouchMoveDir
     5 {
     6     idle,left,right,up,down
     7 }
     8 
     9 public class TouchTest : MonoBehaviour {
    10     public GameObject target;
    11     float minDis = 1;
    12     TouchMoveDir moveDir;
    13 
    14     // Use this for initialization
    15     void Start () {
    16         Input.multiTouchEnabled = true;
    17         Input.simulateMouseWithTouches = true;
    18     }
    19     
    20     // Update is called once per frame
    21     void Update () {
    22         if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) 
    23         {
    24             if(Input.GetTouch(0).deltaPosition.sqrMagnitude > minDis)
    25             {
    26                 Vector2 deltaDir = Input.GetTouch(0).deltaPosition;
    27                 if(Mathf.Abs(deltaDir.x) > Mathf.Abs(deltaDir.y))
    28                 {
    29                     moveDir = deltaDir.x>0?TouchMoveDir.right:TouchMoveDir.left;
    30                 }
    31                 if(Mathf.Abs(deltaDir.y) > Mathf.Abs(deltaDir.x))
    32                 {
    33                     moveDir = deltaDir.y>0?TouchMoveDir.up:TouchMoveDir.down;
    34                 }
    35             }
    36         }
    37 
    38         if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Ended) {
    39             moveDir = TouchMoveDir.idle;
    40         }
    41 
    42         if (moveDir == TouchMoveDir.right) {
    43             Debug.Log("right");
    44             target.transform.position += transform.right * 0.2f;
    45         }
    46         if (moveDir == TouchMoveDir.left) {
    47             Debug.Log("left");
    48             target.transform.position -= transform.right * 0.2f;
    49         }
    50         if (moveDir == TouchMoveDir.up) {
    51             target.transform.position += transform.up * 0.2f;
    52         }
    53         if (moveDir == TouchMoveDir.down) {
    54             target.transform.position -= transform.up * 0.2f;
    55         }
    56     }
    57 }
    TouchMoveDir
  • 相关阅读:
    sql:drop、delete、truncate的区别
    pgsql:插入数据,存在就更新,不存在就插入
    sql:多表连接查询
    克隆模式
    canvas 实现星空闪烁的效果,鼠标滑动,连接周围的点
    JS微信网页图片预览可放大缩小
    muduo_base 02 (Atomic)
    muduo_base 01 (Timestamp)
    select/poll/epoll
    socket编程(二)
  • 原文地址:https://www.cnblogs.com/kylinxue/p/4582044.html
Copyright © 2011-2022 走看看