场景里必须只有一个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 );
}
}
点击Game窗口,既输出点击处的坐标。
在FingerGesture里,用户的手势都由GestureRecognizers组件来处理,它是顺序处理被识别匹配的用户动作的。
每种手势都有自己的脚本,存放脚本的路径在Plugins\FingerGestures\Scripts\Gesture Recognizers。
要识别一个特殊手势,你需要:
1、添加对应的GestureRecognizer组件到场景中的目标物件。
2、配置它的属性。
3、监听它的手势事件和对应响应。
作为手势事件通知的一部分,GestureRecognizer传递一个包含相关信息(位置,手指触屏点列表,选择的场景物件,相关的GestureRecognizer等)的事件参数。
一个手势识别器有以下监听事件的方式:
1、使用标准的.net 委托事件模型,每一个手势识别器都暴露一个.net事件接口。
2、使用unity的SendMessage()函数 :
手势事件将会被广播到游戏对象里所有的组件。
上文已说过。
属性
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("----->>");
}
}
属性
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;
}
}
属性
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;
}
}
属性
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;
}
}