FingerGestures 3.1 插件详解
最近做一款游戏需要手势识别,网上搜了很多此插件用法仍然一知半解,经过一番求助,最终可以初步使用此插件。在此总结分享,欢迎指正。
此插件可在Unity官方商店下载也可在文末网盘链接下载
下载完成之后直接导入Unity工程接下来来介绍记录一下此插件中的目录结构:
路径,相对Assets/Plugin/… | 描述 |
---|---|
FingerGestures/ | 插件的根目录 |
FingerGestures/Prefabs | 可以直接拖放到场景中的预设资源(prefabs) |
FingerGestures/Scripts | 核心脚本和组件 |
FingerGestures/Scripts/Gesture Recognizers | 每个手势识别 的脚本 |
FingerGestures/Scripts/Finger Event Detectors | 每个触摸事件检测器的脚本 |
FingerGestures/Scripts/Components | 手势识别和触摸事件所需要添加的额外组件 |
FingerGestures/Toolbox | FingerGestures 自带的工具箱脚本 |
FingerGestures/Samples.unitypackage | 所有例子的子包 |
FingerGestures/PlayMaker Actions.unitypackage | FingerGestures对PlayMaker扩展的插件 |
Editor/FingerGestures | FingerGestures对编辑器的扩展 |
对目录结构各脚本预制有个基本了解之后开始使用它。在网上找了好多教程都是如下操作:
1.导入插件
点击Import导入完成
2.将如下预制体拖入项目场景Hierarchy
注:FingerGesture预制最好放在整个场景的最外层如图示 若将其放在某个预制内部 在销毁创建预制的时候会有坑出现有兴趣的可以看看源码。
3.在当前场景创建一个空物体在空物体上添加你需要手势的对应脚本组件
4.这里先添加一个拖动时别添加后如图:
创建脚本FingerTest.cs并创建一个方法,方法名要与脚本DragRecognizer中蓝色方框勾选的方法名一致,方法名如下脚本 :
将此脚本挂载在场景中任意游戏物体身上并将此游戏物体赋给脚本DragRecognizer中的MessageTarget运行打印出日志如图:
这是其中拖拽手势 其余的各种手势只需对应在第三步中选择添加不同脚本组件 然后在脚本中写对应名称的方法。这种做法显得有些杂乱不太简洁。下面介绍一下方便的手势方法调用。
使用C#的事件简化手势方法调用
1.重复之前的插件导入操作,将指定预制拖入场景中,接下来我们将所有的我们需要的手势脚本组件都添加到我们先前拖动到场景的预制体上如图示:
2.接下来我们创建一个脚本名为GesturesManger.cs的手势管理脚本。
RequireComponent的作用:
当你添加的一个用了RequireComponent组件的脚本,需要的组件将会自动被添加到game object(游戏物体)。这个可以有效的避免组装错误。举个例子一个脚本可能需要刚体总是被添加在相同的game object(游戏物体)上。用RequireComponent属性的话,这个过程将被自动完成,因此你可以永远不会犯组装错误。
用法:在新建的类前面加 [RequireComponent(typeof(Rigidbody))] Rigidbody可以是任何你需要的脚本组件名称如上图示。
接下来脚本内添加代码
[RequireComponent(typeof(PinchRecognizer))] //按压捏 识别
[RequireComponent(typeof(LongPressRecognizer))] //长按 识别
[RequireComponent(typeof(DragRecognizer))] //拖动 识别
[RequireComponent(typeof(TwistRecognizer))] //旋转 识别
[RequireComponent(typeof(FingerDownDetector))] //按下
[RequireComponent(typeof(FingerUpDetector))] //抬起
[RequireComponent(typeof(ScreenRaycaster))]//屏幕层级识别
[RequireComponent(typeof(FingerGestures))] //手势
public class GesturesManger : MonoBehaviour
{
public static GesturesManger Instance;
public Action Event_CloseMoreFeatures;
/// <summary>
/// 按压手势
/// </summary>
public Action<PinchGesture> Event_Pinch;
/// <summary>
/// 长按手势识别
/// </summary>
public Action<LongPressGesture> Event_LongPress;
/// <summary>
/// 拖动事件
/// </summary>
public Action<DragGesture> Event_Drag;
/// <summary>
/// 旋转事件
/// </summary>
public Action<TwistGesture> Event_Twist;
/// <summary>
/// 抬起
/// </summary>
public Action<FingerUpDetector> Event_FingerUp;
/// <summary>
/// 按下
/// </summary>
public Action<FingerDownDetector> Event_FingerDown;
/// <summary>
/// 可以用来选定在哪一层可以识别这些手势
/// </summary>
public ScreenRaycaster screenRaycaster;
private void Awake()
{
Instance = this;
}
/// <summary>
/// 做出按压手势时此方法执行
/// </summary>
/// <param name="gesture"></param>
private void OnPinch(PinchGesture gesture)
{
Event_Pinch?.Invoke(gesture);
}
/// <summary>
/// 做出长按手势时此方法执行
/// </summary>
/// <param name="gesture"></param>
private void OnLongPress(LongPressGesture gesture)
{
}
/// <summary>
/// 抬起手势后此方法执行
/// </summary>
/// <param name="e"></param>
private void OnFingerUp(FingerUpEvent e)
{
}
/// <summary>
/// 按下手势后此方法执行
/// </summary>
/// <param name="e"></param>
private void OnFingerDown(FingerDownEvent e)
{
}
/// <summary>
/// 当你拖动手势后 此方法执行
/// </summary>
/// <param name="gesture"></param>
private void OnDrag(DragGesture gesture)
{
}
}
在需要使用以上手势的任意脚本只需注册以上脚本组件对应事件
private void Awake()
{
GestureMgr.Instance.Event_Drag += Event_Drag;
GestureMgr.Instance.Event_Pinch += Event_Pinch;
//GestureMgr.Instance.Event_Twist += Event_Twist;
}
private void Event_Pinch(PinchGesture obj)
{
//写手势触发后的处理脚本
//Debug.Log("DragDouble");
}
链接:https://pan.baidu.com/s/1zAyDLHwTQ6BgfCyGVcFlnw
提取码:7m42