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

时间: 2024-08-06 11:43:21

Unity实现手指滑屏的相关文章

H5单页面手势滑屏切换原理

H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,效果图如下所示,本文简单说一下其实现原理和主要思路. 1.实现原理 假设有5个页面,每个页面占屏幕100%宽,则创建一个DIV容器viewport,将其宽度(width) 设置为500%,然后将5个页面装入容器中,并让这5个页面平分整个容器,最后将容器的默认位置设置为0,overflow设置为hidden,这样屏幕就默认显示第一个页面. <div id="v

Android中三种超实用的滑屏方式汇总(转载)

Android中三种超实用的滑屏方式汇总 现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习惯性的有事没事的左右滑屏,也不知道在干什么...嘿嘿),由于前段时间项目的需要,所以也对其研究了一下,总的来说滑屏实现有三种方式:(至于其他的实现方式目前后还没碰到...) 1.ViewPager 2.ViewFlipper 3.ViewFlow 一.ViewPager 官方文档介绍:http://developer.android.com/reference/

【移动开发】Android中三种超实用的滑屏方式汇总(ViewPager、ViewFlipper、ViewFlow)

现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习惯性的有事没事的左右滑屏,也不知道在干什么...嘿嘿),由于前段时间项目的需要,所以也对其研究了一下,总的来说滑屏实现有三种方式:(至于其他的实现方式目前后还没碰到...) 1.ViewPager 2.ViewFlipper 3.ViewFlow   一.ViewPager 官方文档介绍:http://developer.android.com/reference/android/support/v4/

Android中左右滑屏实现

在网上搜索了下滑屏的实现,自己整理了下, 代码如下: package kexc.scroll; import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.VelocityTracker;import android.view.View;import android.view.V

H5案例分享:移动端滑屏 touch事件

移动端滑屏 touch事件 移动端触屏滑动的效果的效果在电子设备上已经被应用的越来越广泛,类似于PC端的图片轮播,但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件能跟踪到屏幕滑动的每根手指. 以下是四种touch事件 touchstart: //触摸屏幕时触发:即使已经有一个手指放在了屏幕上也会触发.touchmove: //在屏幕上滑动时连续的触发.在这个事件发生期间,调用preventDefault()可阻止滚动.touchend: //从屏幕上移开

H5案例分享:移动端touch事件判断滑屏手势的方向

移动端touch事件判断滑屏手势的方向 方法一 当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY: 当触发touchmove事件时,在获取此时手指的横坐标moveEndX和纵坐标moveEndY;最后,通过这两次获取的坐标差值来判断手指在手机屏幕上的滑动方向. 思路:用touchmove的最后坐标减去touchstart的起始坐标,X的结果如果正数,则说明手指是从左往右划动:X的结果如果负数,则说明手指是从右往左划动:Y的结果如果正数,则说明手指是从

Scroller的应用--滑屏实现

1.Scroller源码分析 下面是对Scroller源码的分析,并附有源码,如下: package android.widget; import android.content.Context; import android.hardware.SensorManager; import android.os.Build; import android.util.FloatMath; import android.view.ViewConfiguration; import android.vi

Android中滑屏实现----触摸滑屏以及Scroller类详解 .

转:http://blog.csdn.net/qinjuning/article/details/7419207 知识点一:  关于scrollTo()和scrollBy()以及偏移坐标的设置/取值问题 scrollTo()和scrollBy()这两个方法的主要作用是将View/ViewGroup移至指定的坐标中,并且将偏移量保存起来.另外: mScrollX 代表X轴方向的偏移坐标 mScrollY 代表Y轴方向的偏移坐标 关于偏移量的设置我们可以参看下源码: package com.qin.

移动端滑屏全应用【二】滑屏封装注意事项与移动端轮播

移动端滑屏封装注意事项: 1.touchMove时候方向判断(可以控制在 以x轴位中心正负15度之内为横向滑屏,纵向滑屏同理) 2.上下滑屏与左右滑屏的冲突(判断用户滑动方向后,只做单方向的处理) 3.安卓触摸(例如某个人手指很粗)触发touchMove(记录上一次的手指坐标,每一次move的时候判断,上次的坐标与这一次的坐标相同则return掉) 移动端轮播封装注意事项: 1.使用transition做过度效果时,需要在每次start的时候清除transition,否则效果会有卡顿 2.每次e