FingerGestures 3.1 插件使用总结及详细解析

本文详细介绍了FingerGestures 3.1插件在Unity中的使用,包括插件的下载、导入、目录结构分析,以及如何通过C#事件简化手势方法调用的过程。作者提供了从创建手势识别脚本到管理多个手势的步骤,并分享了在实际应用中避免问题的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值