Unity Asset(2)手势插件FingerGesture

Unity Asset(2)手势插件FingerGesture

一、基本识别 GestureRecognizers(检测用户输入并发送事件)

场景里必须只有一个FingerGestures组件示例。它相当于Manager。
(1)直接新建GameObject起名Manager,并加FingerGestures脚本
(2)直接新建GameObject起名Gestures,并加TapRecognizer脚本
(3)直接新建TapTutorial.cs 并放到Gestures上
(4)在Gestures里TapRecognizer面板下,点'Copy Event To Clipboard' 把对应代码拷贝到粘贴板上,并在TapTutorial脚本里粘贴代码。
当recognizer检测对应输入到后, 会在obj上发对应的SendMessage消息。但是SendMessage开销大,可以自己实现开销更小的delegate-based events.


TapTutorial.cs

using UnityEngine; 
using System.Collections; 

public class TapTutorial : MonoBehaviour 
{ 
	void OnTap(TapGesture gesture) 
	{ 
		Debug.Log( "Tap gesture detected at  "
			+ gesture.Position + ". It was sent by " 
			+ gesture.Recognizer.name ); 
		} 
	}

Unity Asset(2)手势插件FingerGesture_第1张图片

点击Game窗口,既输出点击处的坐标。


二、手势识别器

在FingerGesture里,用户的手势都由GestureRecognizers组件来处理,它是顺序处理被识别匹配的用户动作的。

每种手势都有自己的脚本,存放脚本的路径在Plugins\FingerGestures\Scripts\Gesture Recognizers。


要识别一个特殊手势,你需要:
1、添加对应的GestureRecognizer组件到场景中的目标物件。 
2、配置它的属性。 
3、监听它的手势事件和对应响应。
作为手势事件通知的一部分,GestureRecognizer传递一个包含相关信息(位置,手指触屏点列表,选择的场景物件,相关的GestureRecognizer等)的事件参数。


一个手势识别器有以下监听事件的方式: 
1、使用标准的.net 委托事件模型,每一个手势识别器都暴露一个.net事件接口。 
2、使用unity的SendMessage()函数 :

手势事件将会被广播到游戏对象里所有的组件。


①轻击手势识别器

上文已说过。


②拖拽手势识别器

Unity Asset(2)手势插件FingerGesture_第2张图片

属性 
1、Movement Tolerance:最小的拖动距离才触发识别器。 
2、Apply Same Direction Constraint:只能用于多点拖拽,打开后,如果所有点不是向同一个方向拖拽,识别器将不会识别。



using UnityEngine; 
using System.Collections; 

public class TapTutorial : MonoBehaviour 
{
    public Vector2 deltaMove;
    public Vector2 totalMove;
	void OnDrag(DragGesture gesture) { /* your code here */
        // 当前识别器阶段 (Started/Updated/Ended)
        ContinuousGesturePhase phase = gesture.Phase;
        // 最后一帧的拖拽/移动数据
        deltaMove = gesture.DeltaMove;
        //完整的拖拽数据
        totalMove = gesture.TotalMove;

        //Debug.Log(deltaMove);
        Debug.Log(totalMove);
        Debug.Log("----->>");
		} 
	}



③滑动手势识别器

Unity Asset(2)手势插件FingerGesture_第3张图片

属性 
1、Min Distance: 必须滑动的最小距离。 
2、Max Distance:允许滑动的最大距离。 
3、Min Velocity:滑动时候最小速度。
4、Max Deviation:允许的最大角度偏差。(度)


using UnityEngine; 
using System.Collections; 

public class TapTutorial : MonoBehaviour 
{
    Vector2 totalMove;
    void OnSwipe(SwipeGesture gesture)
    {
        // 完整的滑动数据
        Vector2 move = gesture.Move;
        // 滑动的速度
        float velocity = gesture.Velocity;
        // 大概的滑动方向
        FingerGestures.SwipeDirection direction = gesture.Direction;

    }
}

Unity Asset(2)手势插件FingerGesture_第4张图片


④长按手势识别器

Unity Asset(2)手势插件FingerGesture_第5张图片

属性 
1、Press Duration:最少长按时间。 
2、Move Tolerance:长按过程中允许的最大移动偏差。


using UnityEngine; 
using System.Collections; 

public class TapTutorial : MonoBehaviour 
{
    Vector2 totalMove;
    void OnLongPress(LongPressGesture gesture)
    {
        // 长按持续时间
        float elapsed = gesture.ElapsedTime;
    }
}

⑤缩放手势识别器

Unity Asset(2)手势插件FingerGesture_第6张图片


属性 
1、Minimum DOT :允许的小向量点积。 
2、Minimum Distance:两个手指第一次触屏时候允许的最短路径。

using UnityEngine; 
using System.Collections; 

public class TapTutorial : MonoBehaviour 
{
    void OnPinch(PinchGesture gesture)
    {
        // 识别器当前状态(Started/Updated/Ended)
        ContinuousGesturePhase phase = gesture.Phase;
        // 当前两个手指的距离
        float gap = gesture.Gap;
        // 当前与上一帧的变动值
        float delta = gesture.Delta;
    }
}


你可能感兴趣的:(Unity)