iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >[Unity3D插件]FingerGes
  • 783
分享到

[Unity3D插件]FingerGes

插件Unity3DFingerGes 2023-01-31 06:01:24 783人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

当时的手机霸主诺基亚也曾辉煌过,但现在已经逐渐退出了人们的视线,因为它没有跟上潮流,IT世界发展瞬息万变,正因为它没有迎合时代发展,所以就逐渐被淘汰。在诺基亚时代,手机都是按键式的,但自从出现了Android系统,各种智能机都如雨后春笋般涌

当时的手机霸主诺基亚也曾辉煌过,但现在已经逐渐退出了人们的视线,因为它没有跟上潮流,IT世界发展瞬息万变,正因为它没有迎合时代发展,所以就逐渐被淘汰。在诺基亚时代,手机都是按键式的,但自从出现了Android系统,各种智能机都如雨后春笋般涌出,往大屏幕,无按键的趋势发展,所以各种手机应用只能用虚拟的,比如虚拟按钮,虚拟键盘,虚拟摇杆等等。继续之前做的小龙游戏的设计,然后就想到点击屏幕执行小龙飞跃的操作,然后就想到Unity中FingerGesture插件。然后去搜索这个插件的使用,自然而言就搜到了Momo的博客,原来他老早就研究过了这个插件,我也就顺便学习一下,写一写学习心得!

关于Fingergesture的使用Momo的创建步骤和代码已经写得很详细了,关于插件的下载,他博客也写得很清楚,我这儿就谢谢我的个人理解和学习的一个过程!

接下来先看效果图,不要看就一个鼠标按下的操作,可以分解成很多过程,鼠标按下->鼠标按住->鼠标弹起,这很有当年开发单片机的感觉,有相似过程,单片机上的按钮会出发0-1高低电频,比如没按住是高电平,按下是低电平,一直按住就一直处于低电平的状态,然后LED灯管就能一直亮,然后再松开又回到高电平,LED灯灭,这电频变化的一瞬间有一个触发方式,边沿触发,呵呵,似乎是扯远了,但其实原理有类似的地方!

单击屏幕

SouthEast

提醒一下,我点击的左下角,看到屏幕的坐标原点其实是以左下角为原点的,这就是OpenGL坐标的原点规定!

双击屏幕

SouthEast

滑动手势

SouthEast
SouthEast

长按手势

SouthEast

  1. using UnityEngine;  

  2. using System.Collections;  

  3. publicclass FingerEvent :  MonoBehaviour {  

  4. void OnEnable()  

  5.    {  

  6. //启动时调用,这里开始注册手势操作的事件。

  7. //按下事件: OnFingerDown就是按下事件监听的方法,这个名子可以由你来自定义。方法只能在本类中监听。下面所有的事件都一样!!!

  8.        FingerGestures.OnFingerDown += OnFingerDown;  

  9. //抬起事件

  10.        FingerGestures.OnFingerUp += OnFingerUp;  

  11. //开始拖动事件

  12.        FingerGestures.OnFingerDragBegin += OnFingerDragBegin;  

  13. //拖动中事件...

  14.        FingerGestures.OnFingerDragMove += OnFingerDragMove;  

  15. //拖动结束事件

  16.        FingerGestures.OnFingerDragEnd += OnFingerDragEnd;  

  17. //上、下、左、右、四个方向的手势滑动

  18.        FingerGestures.OnFingerSwipe += OnFingerSwipe;  

  19. //连击事件 连续点击事件

  20.        FingerGestures.OnFingerTap += OnFingerTap;  

  21. //按下事件后调用一下三个方法

  22.        FingerGestures.OnFingerStationaryBegin += OnFingerStationaryBegin;  

  23.        FingerGestures.OnFingerStationary += OnFingerStationary;  

  24.        FingerGestures.OnFingerStationaryEnd += OnFingerStationaryEnd;  

  25. //长按事件

  26.        FingerGestures.OnFingerLongPress += OnFingerLongPress;  

  27.    }  

  28. void OnDisable()  

  29.    {  

  30. //关闭时调用,这里销毁手势操作的事件

  31. //和上面一样

  32.        FingerGestures.OnFingerDown -= OnFingerDown;  //点击开始

  33.        FingerGestures.OnFingerUp -= OnFingerUp; //点击结束

  34.        FingerGestures.OnFingerDragBegin -= OnFingerDragBegin; //拖动开始

  35.        FingerGestures.OnFingerDragMove -= OnFingerDragMove;  //拖动中

  36.        FingerGestures.OnFingerDragEnd -= OnFingerDragEnd;   //拖动结束

  37.        FingerGestures.OnFingerSwipe -= OnFingerSwipe;  //判断四个方向

  38.        FingerGestures.OnFingerTap -= OnFingerTap; //连续点击

  39. //按下事件

  40.        FingerGestures.OnFingerStationaryBegin -= OnFingerStationaryBegin;  

  41.        FingerGestures.OnFingerStationary -= OnFingerStationary;  

  42.        FingerGestures.OnFingerStationaryEnd -= OnFingerStationaryEnd;  

  43.        FingerGestures.OnFingerLongPress -= OnFingerLongPress;  //长按

  44.    }  

  45. //按下时调用

  46. void OnFingerDown( int fingerIndex, Vector2 fingerPos )  

  47.    {  

  48. //int fingerIndex 是手指的ID 第一按下的手指就是 0 第二个按下的手指就是1。。。一次类推。

  49. //Vector2 fingerPos 手指按下屏幕中的2D坐标

  50. //将2D坐标转换成3D坐标

  51.        transfORM.position = GetWorldPos( fingerPos );  

  52.        Debug.Log(" 按下 = 坐标:"  +fingerPos);  

  53.    }  

  54. //抬起时调用

  55. void OnFingerUp( int fingerIndex, Vector2 fingerPos, float timeHeldDown )  

  56.    {  

  57.        Debug.Log(" 抬起 = 坐标:"  +fingerPos  +"时间:"+timeHeldDown);  

  58.    }  

  59. //开始滑动

  60. void OnFingerDragBegin( int fingerIndex, Vector2 fingerPos, Vector2 startPos )  

  61.    {  

  62.         Debug.Log("滑动开始 fingerIndex =" + fingerIndex  + " fingerPos ="+fingerPos +"startPos =" +startPos);  

  63.    }  

  64. //滑动结束

  65. void OnFingerDragEnd( int fingerIndex, Vector2 fingerPos )  

  66.    {  

  67.        Debug.Log("滑动结束 fingerIndex =" + fingerIndex  + " fingerPos ="+fingerPos);  

  68.    }  

  69. //滑动中

  70. void OnFingerDragMove( int fingerIndex, Vector2 fingerPos, Vector2 delta )  

  71.    {  

  72.           transform.position = GetWorldPos( fingerPos );  

  73.            Debug.Log(" 滑动中 ="  +fingerPos);  

  74.    }  

  75. //上下左右四方方向滑动手势操作

  76. void OnFingerSwipe( int fingerIndex, Vector2 startPos, FingerGestures.SwipeDirection direction, float velocity )  

  77.    {  

  78. //结果是 Up Down Left Right 四个方向

  79.        Debug.Log("滑动方向(Up/Down/Left/Right) :" + direction + " with finger " + fingerIndex);  

  80.    }  

  81. //连续按下事件, tapCount就是当前连续按下几次

  82. void OnFingerTap( int fingerIndex, Vector2 fingerPos, int tapCount )  

  83.    {  

  84.        Debug.Log("连续按下次数: " + tapCount + " ,fingerindex: " + fingerIndex);  

  85.    }  

  86. //按下事件开始后调用,包括 开始 结束 持续中状态只到下次事件开始!

  87. void OnFingerStationaryBegin( int fingerIndex, Vector2 fingerPos )  

  88.    {  

  89.         Debug.Log("按下事件开始: " + fingerPos + " times with finger " + fingerIndex);  

  90.    }  

  91. void OnFingerStationary( int fingerIndex, Vector2 fingerPos, float elapsedTime )  

  92.    {  

  93.         Debug.Log("按下中: " + fingerPos + " times with finger " + fingerIndex);  

  94.    }  

  95. void OnFingerStationaryEnd( int fingerIndex, Vector2 fingerPos, float elapsedTime )  

  96.    {  

  97.         Debug.Log("按下结束:" + fingerPos + " times with finger " + fingerIndex);  

  98.    }  

  99. //长按事件

  100. void OnFingerLongPress( int fingerIndex, Vector2 fingerPos )  

  101.    {  

  102.        Debug.Log("长按事件,位置: " + fingerPos + ",fingerIndex:"+fingerIndex );  

  103.    }  

  104. //把Unity屏幕坐标换算成3D坐标

  105.    Vector3 GetWorldPos( Vector2 screenPos )  

  106.    {  

  107.        Camera mainCamera = Camera.main;  

  108. return mainCamera.ScreenToWorldPoint( new Vector3( screenPos.x, screenPos.y, Mathf.Abs( transform.position.z - mainCamera.transform.position.z ) ) );  

  109.    }  

  110. }  


提示:OnEnable()和OnDisable()中注册和移除事件的方法,这里用到是C#语法委托和事件这两种语法,不明白的可以学习一下我之前写的关于这语法的文章,委托和事件(点击打开),委托(delegate)是一种类型,而事件(Event)是一种实例(委托中的一种),了解过C语言中函数指针的就应该明白这种用法的原理!


我们就通过F12来查看FingerGestures插件方法实现的原理,就拿FingerGestures.OnFingerDown+= OnFingerDown;这行代码来举例子:

首先FingerGestures是一个类,作者自定义的一个手势插件的类,真佩服能写插件的人,这才是真大牛!还是先看一下几个脚本的含义

SouthEast

嵌套定义得不可谓不复杂,呵呵!

FingerGestures.OnFingerDown,F12查看一下这个OnFingerDown是一个啥东东,会发现

[csharp]view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. /// <summary>

  2. /// Event fired when a finger's OnDown event fires

  3. /// <seealso cref="Finger.OnDown"/>

  4. /// </summary>

  5. publicstaticevent FingerDownEventHandler OnFingerDown;  


这其实就是一个事件的申明,看英文注释就知道是个Event,其实也看不出什么,重点是在这个FingerDownEventHandler,继续F12


[csharp]view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. /// <summary>

  2. /// Delegate for the OnFingerDown event

  3. /// </summary>

  4. /// <param name="fingerIndex">0-based index uniquely indentifying a specific finger</param>

  5. /// <param name="fingerPos">Current position of the finger on the screen</param>

  6. publicdelegatevoid FingerDownEventHandler( int fingerIndex, Vector2 fingerPos );  

这是一个委托类型的声明,两个参数什么意思写的很明显,不解释!


然后来看一下OnFingerDown这个我们自己自定义的方法,这用+=连接起来,其实就是多播委托的一种语法模式,一个委托能够执行多个方法,就像小明妈妈委托小明先去买菜,这是一个方法吧,然后买完菜去洗菜,然后做菜等等就是这种+=的形象解释。
当然结束的时候要将方法给-=掉,不然小明会生气了,心中不满,妈妈你总是老叫我做个不停呀,哈哈!这就是OnDisable()中为什么要-=的一个解释!

事件指向自己自定义的方法,但前提是参数必须要一样,就是你所委托的这个人要能完成你的事情,打个形象的比喻,你不能叫一个刚出生的小孩去打酱油吧,呵呵,就是这个道理!这下你感觉对委托和事件是一个什么关系应该更加深刻了吧!


--结束END--

本文标题: [Unity3D插件]FingerGes

本文链接: https://www.lsjlt.com/news/190393.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • [Unity3D插件]FingerGes
    当时的手机霸主诺基亚也曾辉煌过,但现在已经逐渐退出了人们的视线,因为它没有跟上潮流,IT世界发展瞬息万变,正因为它没有迎合时代发展,所以就逐渐被淘汰。在诺基亚时代,手机都是按键式的,但自从出现了Android系统,各种智能机都如雨后春笋般涌...
    99+
    2023-01-31
    插件 Unity3D FingerGes
  • Unity3D AudioSource组件如何使用
    这篇文章主要介绍了Unity3D AudioSource组件如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Unity3D AudioSource组件如何使用文章都会有所收获,下面我们...
    99+
    2023-07-05
  • Unity3D读取PDF文件内容
    最近在研究Unity3D中读取PDF的内容,预想了三种方案,一是用Java来实现,二是调用C#的iTextSharp库或者PDFBox库来实现,三是下载PDF Renderer插件(土豪可以买这个插件,支持的系统也比较全面),java不是很...
    99+
    2023-01-31
    文件 内容 Unity3D
  • 【Unity3D】存档文件加密代码
    存档文件, 被修改起来现在变的很容易了, 为了解决这个问题,请用下面的代码,修改playerPrefs.cs 1.替换 fileReader = new StreamReader(fileName); serializedInput =...
    99+
    2023-01-31
    文件加密 代码 Unity3D
  • IDEA插件之mybatisx 插件使用教程
           MybatisX 是一款基于 IDEA 的快速开发插件,方便在使用mybatis以及mybatis-plus开发时简化繁琐的重复操作,提高开发速率。         MybatisX的作用就是帮助我们自动化建立mybatis的...
    99+
    2023-09-01
    mybatis java spring boot
  • tomcat插件与Jrebel插件如何整合
    这篇文章将为大家详细讲解有关tomcat插件与Jrebel插件如何整合,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。工欲善其事必先利其器tomcat插件是没装myeclipse插件必备的,它减少了部署工程...
    99+
    2023-06-17
  • IDEA插件之mybatisx 插件使用教程
    目录mybatisx 插件使用插件安装自动生成代码文件跳转代码自动补全自定义模板MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。今天给大家介绍下mybatisx ...
    99+
    2024-04-02
  • FastAdmin插件开发辅助增强插件
    本人开发的FastAdmin插件开发辅助增强插件 不改变官方的开发习惯,但更丝滑,尽最大的努力生成你想要的代码 非常重要 非常重要 非常重要 写在最前面是为了不要漏了,导致插件没有正常工作。 编写代码...
    99+
    2023-09-01
    php 数据库 安全
  • Unity3D时钟与钟表小组件如何使用
    这篇文章主要介绍“Unity3D时钟与钟表小组件如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Unity3D时钟与钟表小组件如何使用”文章能帮助大家解决问题。效果:实现1、场景搭建使用Cyl...
    99+
    2023-07-05
  • IDEA插件之Mybatis log插件安装及使用
    一 前言分析 我们在idea控制台看见的sql日志通常是这样的,实际开发调试中我们想把完的sql复制出来,到数据库中执行分析数据情况。但是如果我们的sql有动态传参控制台输出的sq入参会用“?”代替入参,不能直接使用。 SqlSession...
    99+
    2023-08-16
    mybatis intellij-idea java
  • 一文秒懂idea的git插件跟翻译插件
    2021年4月19日,今天的心情有些复杂,因为旁边工位上的一个同事离职了,平时中午一般会一起出去吃饭,有什么工作上的问题一般都会向他请教,他的学习能力很强,会的东西也很多,但是他还是...
    99+
    2024-04-02
  • IDEA中MyBatisX插件,快速生成domain、mapper、service插件
    大家有没有这样的烦恼,当我们创建玩数据库中表后,每次都要自己写domain实体类、mapper文件,这些文件都是一成不变的,如果表中字段很多的时候会很麻烦。 而MyBatisX就可以帮我们解决这些问题,自动生成表的实体类mapper、ser...
    99+
    2023-09-11
    intellij-idea java 数据库 mybatis
  • pycharm插件在哪
    安装步骤:1、打开PyCharm,并点击顶部菜单栏中的“File”选项;2、选择“Settings”;3、在设置窗口中,选择“Plugins”选项;4、点击“Browse repositories…”按钮,将看到所有可用的插件;5、在搜索框...
    99+
    2023-12-09
    插件 pycharm
  • golang插件 安装
    Go 是一种快速、简单、高效的编程语言,它在编译与执行速度、内存分配和并发编程方面具有诸多优势。因此,越来越多的开发者开始采用 Go 语言来开发和部署各种应用程序。然而,Go 语言在插件管理方面是相对欠缺的,这使得在使用某些三方库或框架时,...
    99+
    2023-05-16
  • eclisegithub插件用法
    Eclipse是一款非常流行的开发工具,而GitHub则是目前最受欢迎的代码托管平台之一。为了更好地在Eclipse中管理GitHub操作,GitHub推出了一款名为eclipsegithub的插件。本文将介绍这款插件的使用方法,希望能对广...
    99+
    2023-10-22
  • k3cloud单据插件
     命名空间Kingdee.BOS.Core.Bill.PlugIn继承体系System.ObjectKingdee.BOS.Core.DynamicForm.PlugIn.AbstractDynamicFormPlugInKingdee.B...
    99+
    2023-01-31
    单据 插件 k3cloud
  • idea神级插件及如何安装Bito插件【Bito-ChatGPT】
    目录什么是Bito?如何安装Bito插件如何使用Bito插件什么是Bito? Bito是一款在IntelliJ IDEA编辑器中的插件,Bito插件是由ChatGPT团队开发的,它是...
    99+
    2023-05-16
    idea  Bito-ChatGPT idea ChatGPT插件 Bito插件
  • IDEA安装插件搜索不到插件如何解决
    这篇文章主要介绍了IDEA安装插件搜索不到插件如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇IDEA安装插件搜索不到插件如何解决文章都会有所收获,下面我们一起来看看吧。通过设置代理和去掉使用安装链接的方...
    99+
    2023-07-05
  • python插件 docker buil
         由于公司线上安全要求,不能直接使用pip安装,也没有自行部署pypi源,于是有了此篇文章。本文主要以etcd3插件为示例。     要求:         python插件需要附属在自己的软件包程序中,以os.path.appen...
    99+
    2023-01-31
    插件 python buil
  • Python插件:Python Director
    原文来自:https://www.oschina.net/p/python+director前言Director 是一个Python的类库用来开发命令行工具的插件,利用它可以很方便的添加新的功能。下面是一个简单的例子:...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作