LeanTouch 案例分享
LeanTouch
官方API http://carloswilkes.com/Documentation/LeanTouch
安装LeanTouch,生成LeanTouch组件
生成一个Touch对象,对象有如下脚本参数
- TapThreshold:Tap(轻触)动作的间隔时间
- Swipe Threshold:Swipe(滑动)动作的触发距离
- ReferenceDpi:缩放的点数
- GuiLayers:Gui层的范围,用于忽略手指动作
- RecordFingers:是否记录(2个设置参数)
- SimulateMultiFingers:允许不支持多点触控上模拟触控输入(4个设置参数)
01 Finger Down
屏幕点击演示
当点击屏幕时,通过LeanFingerDown脚本的OnWorld回调,参数Vector3,点击获得世界的位置。
02 Finger Up
当鼠标点击抬起时触发,同上
- Distance:这个参数影响Vector3中Z轴的值
03 Finger Swipe
滑动控制
- OnDelta:滑动的变化值(x,y)
- OnDistance:滑动距离
- OnWorldFrom:开始位置
- OnWorldTo:结束位置
- OnWorldDelta:距离变化
04 Rotation
滑动的方向
- 角度的算法:
atan2返回以弧度表示的 y/x 的反正切
rad2deg把弧度转换位角度值
if (delta.sqrMagnitude > 0.0f)
{Angle = Mathf.Atan2(delta.x, delta.y) * Mathf.Rad2Deg;
}
- 用DoTween来实现这个角度功能:(有别于官方案例)
public RectTransform arrow;
public void OnDelta(Vector2 pos)
{if (pos.sqrMagnitude > 0.0f){float Angle = Mathf.Atan2(pos.x, pos.y) * Mathf.Rad2Deg;arrow.DOLocalRotateQuaternion(Quaternion.Euler(0.0f, 0.0f, -Angle), 0.5f);}
}
另外,注意LeanTouch的SwipeThreshold=50,LeanFingerSwipe里的IgnoreStartedOverGui与Ignore Is Over Gui勾去掉;
05 Direction 4
4个方向的识别,N=(0,90),E=(90,90),S=(180,90),W=(270,90)
- RequiredAngle : Swiper角度
0 = Up.
90 = Right.
180 = Down.
270 = Left. - RequriedArc :Swiper在弧度内
-1 = No requirement.
90 = Quarter circle (± 45 degrees).
180 = Semicircle (± 90 degrees).
06 Direction 8
8个方向的识别,N=(0,45),NE=(45,45),E=(90,45),SE=(135,45),S=(180,45),SW=(225,45),W=(270,45),NW=(315,45)
07 Finger Tap
Tap轻触
- OnCount:点击次数
- OnWorld:回调点击位置
08 Spawn
生成一个预制体
- LeanSpawn 加入一个预制体,当OnWorld触发后,生成一个预制体
- 若没有传入Vector3,则会使用预制体的默认位置
09 Block
UI遮挡,不能触发Tap
10 Double
双击Tap触发
- RequiredTapCount:累计点击多少次触发
- RequiredTapInterval:必须点击多少次触发
11 Finger Old
长按的解决方案
12 Transform 3D
手势控制,拖动,放大,旋转
- 加入LeanDragTranslate,LeanTwistRotate,LeanPinchScale
13 Relative
手势控制,拖动,放大,旋转;同上,勾选了Relative,对应世界坐标与相对坐标的区别
14 Transform 2D
手势控制,拖动,放大,旋转;同上,对应2D图片
15 Relative
手势控制,拖动,放大,旋转;勾选了Relative,对应世界坐标与相对坐标的区别;同上,对应2D图片
16 Transform UI
手势控制,拖动,放大,旋转;同上,对应UI图片
17 Relative
手势控制,拖动,放大,旋转;勾选了Relative,对应世界坐标与相对坐标的区别;同上,对应UI图片
18 Select 3D
选择3D物体,点击其他位置,取消选择
在Tap To Select (3D)上的添加的脚本
- LeanSelect:
选择物体,需要通过加入LeanSelect脚本与在可被选择的物体上加入LeanSelectable脚本搭配使用
- Select Using:选择对象的类型
- Layer Mask:射线遮罩层
- Camera:射线相机
- Max Selectables:最大选中数量
- Search:如何在候选游戏对象中搜索
- Reselect:当选择后,发生什么(一直保持选择;取消选择;取消再选择;再次选择)
- Auto Deslect:勾选后,点击其他位置,选择取消
- MaxScreenDistance:当使用屏幕距离选择模式时,这允许您设置从鼠标/手指选择多少缩放像素。
- SuppressMultipleSelectWarning:在场景中使用多个LeanSelect组件通常是一个错误,此组件将对此发出警告。如果你真的知道你在做什么,并且需要多个,那么你可以启用它来隐藏警告。
- LeanFingerTap:
- 在OnFinger里连接LeanSelect的SelectScreenPosition函数
- Lean Selectable:
加入此脚本的物体,才能被Tap识别到
- Deselect On Up:当选择手指向上时是否应该取消选择?
- Hide With Finger:如果选择手指仍被按住,IsSelected是否应暂时返回false?这在使用复杂手势选择多个对象时非常有用
- IsolateSelectingFingers:如果选择手指仍处于活动状态,是否只将其返回到所需的可选择查询?
- Lean Selectable Renderer Color:
变化颜色的一种快捷方式
19 Transform
同上的功能外,在需要控制的对象里,加入拖动,放大,旋转功能,由于有LeanSelectabel的脚本,程序自动设置为,若没有选中,则3个动作的脚本不起作用。
20 Transform Relative
同上,勾选了Relative
21 Select 2D
同上,2D的选择
- Select Using:选择Overlap 2D
22 Select 2D Transform
23 Select 2D Transform Relative
同上
24 Destroy
使用LeanDestroy,消失物体
- 通过LeanSelectable的OnSelect和LeanDestroy的结合,消失物体
25 Select UI
UI的选择
- 选择Canvas UI,触发UI
- 这里使用LeanSelectableGraphicColor来处理
26 Select UI Transform
27 Select UI Transform Relative
同上
28 Press 3D
按住为选择,放开既为不选择
- 这里有2个不同,Reselect里选择了Select Again;触发脚本用LeanFingerDown;
- LeanSelectable里勾选了DeselectOnUp
29 Press 3D Transform
同上
30 Press 3D Isolate
在对象物体上,勾选Isolate Selecting Fingers,如果2个指头不同时触碰在一个物体上操作,是无效的操作
31 - 36 同上,不多描述
37 Finger Trail
滑动手指,出现拖尾的线条效果
- 拖尾效果脚本,可设置LineRenderer的预制体,拖尾和消失时间,颜色等设置
Sidescroll2D
拖动镜头
Sidescroll3D
似乎相同
TouchEvents
用脚本来实现动作
namespace Lean.Touch
{/// <summary>This component will hook into every LeanTouch event, and spam the console with the information.</summary>[HelpURL(LeanTouch.HelpUrlPrefix + "LeanTouchEvents")][AddComponentMenu(LeanTouch.ComponentPathPrefix + "Touch Events")]public class LeanTouchEvents : MonoBehaviour{protected virtual void OnEnable(){// Hook into the events we needLeanTouch.OnFingerDown += HandleFingerDown;LeanTouch.OnFingerUpdate += HandleFingerUpdate;LeanTouch.OnFingerUp += HandleFingerUp;LeanTouch.OnFingerTap += HandleFingerTap;LeanTouch.OnFingerSwipe += HandleFingerSwipe;LeanTouch.OnGesture += HandleGesture;}protected virtual void OnDisable(){// Unhook the eventsLeanTouch.OnFingerDown -= HandleFingerDown;LeanTouch.OnFingerUpdate -= HandleFingerUpdate;LeanTouch.OnFingerUp -= HandleFingerUp;LeanTouch.OnFingerTap -= HandleFingerTap;LeanTouch.OnFingerSwipe -= HandleFingerSwipe;LeanTouch.OnGesture -= HandleGesture;}public void HandleFingerDown(LeanFinger finger){Debug.Log("Finger " + finger.Index + " began touching the screen");}public void HandleFingerUpdate(LeanFinger finger){Debug.Log("Finger " + finger.Index + " is still touching the screen");}public void HandleFingerUp(LeanFinger finger){Debug.Log("Finger " + finger.Index + " finished touching the screen");}public void HandleFingerTap(LeanFinger finger){Debug.Log("Finger " + finger.Index + " tapped the screen");}public void HandleFingerSwipe(LeanFinger finger){Debug.Log("Finger " + finger.Index + " swiped the screen");}public void HandleGesture(List<LeanFinger> fingers){Debug.Log("Gesture with " + fingers.Count + " finger(s)");Debug.Log(" pinch scale: " + LeanGesture.GetPinchScale(fingers));Debug.Log(" twist degrees: " + LeanGesture.GetTwistDegrees(fingers));Debug.Log(" twist radians: " + LeanGesture.GetTwistRadians(fingers));Debug.Log(" screen delta: " + LeanGesture.GetScreenDelta(fingers));}}
}
TwistRotateCustomAxis
控制盒子转动
通过Axis里设置X,Y,Z的设置,来开启或屏蔽相关轴的控制
0,不响应;-1 / 1,响应,但是方向不同
案例1:如何实现在一个区域里做左右滑动?
使用LeanFingerSwipe,LeanSelect,LeanSelectable来实现
- 加入LeanTouch
- 设置LeanFingerSwipe
- 在需要响应滑动的层里面加入LeanSelectable
勾选Isolate Selecting Fingers;
在OnSelect里加入回调函数
- 回调函数的写法
public void OnSelect(Lean.Touch.LeanFinger finger){if (finger.SwipeScreenDelta.x >= 0){// 向右print("向右");}else{// 向左print("向左");}}
通过这4步,即可实现,在一个图片上左右滑动,产生作用;而在外部滑动则不起作用
案例2:实现一个可轻触也可长按的按钮
使用到LeanSelect,LeanSelectable,LeanFingerTap,LeanFingerHeld
- 建立一个LeanTouch
- 建立一个对象(如LeanBtn)加入LeanSelect,LeanFingerTap,LeanFingerHeld;配置如下
- 这里使用了UI来做,在UI的一个Image对象(作为按钮)里,加入LeanSelectable,另外,OnSelect反馈到一个脚本中,Inspector面板如下
- OnSelect脚本如下
public void OnSelect(Lean.Touch.LeanFinger finger)
{if (finger.Tap) {print("tap");}if (finger.Old) {print("old");}}
完成以上4步,即可实现一个即可轻触又可长按的按钮
案例3:实现UI的拖动
1. 默认情况下
- 1.1 加入LeanTouch
- 1.2 在要拖动的UI上加入LeanDragTranslate
完成着这2步后,只要在空白处(若空白处有其他UI,把UI的Raycast Target 勾去掉),即可拖动全部需要拖动的UI了
2. 需要实现,点单个UI上面才拖动,点击空白处不拖动
- 2.1 在之前LeanTouch的基础上,先加入LeanSelect和LeanFingerDown
注意去掉Ignore Started Over Gui
- 2.2 在需要拖动的UI上加入LeanSelectable
OnSelect上加入SetAsLastSibing方法,让选中的层可以显示在最前。
完成以上几步,即可修改为单个UI拖动
LeanTouch 案例分享相关推荐
- 近期活动盘点:AI Time:论道AI安全与伦理、大数据、AI在中国金融保险业的应用案例分享讲座...
想知道近期有什么最新活动?大数点为你整理的近期活动信息在此: AI Time"science debate 论道AI安全与伦理 2019年5月31日 如今,人工智能的社会角色不断更新迭代,越 ...
- linux下批量修改文件名精彩解答案例分享
######################################################### #linux下批量修改文件名精彩解答案例分享 #date:21:34 2011-11 ...
- 关闭 定时开启_【话说定时器系列】之四:STM32定时器更新事件及案例分享
STM32定时器是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍.去年,电堂推出了<STM32 TIMER基础及常规应用介绍>,为大家梳理了 STM32 TIMER 的庞大内容, ...
- 企业大数据运用实战案例分享
一.企业大数据如何起步:从小数据到大数据 目前国内外关于大数据的谈论很多,大多是谈运营级别的,或者说从服务端.服务方提得较多一些.笔者要跟大家交流的问题是作为各类企业尤其是客户方的企业来说,大数据跟他 ...
- 老李案例分享:Weblogic性能优化案例
老李案例分享:Weblogic性能优化案例 POPTEST的测试技术交流qq群:450192312 网站应用首页大小在130K左右,在之前的测试过程中,其百用户并发的平均响应能力在6.5秒,性能优化后 ...
- 2020-12-14 Matlab 模糊控制 车辆泊车 案例分享
Matlab 模糊控制 车辆泊车 案例分享 最近看到了一个知网的文献,研究基于模糊控制的自动泊车,复现了论文, 模糊控制方法参看之前的文章: matlab模糊控制工具箱使用和模糊控制pid实例参考(一 ...
- 计算机网络第4版潘爱民_学术活动 钱江会计实务精英讲坛预告(第84期)| 何继昌 : 战略视角下之财务分析应用实践 兼选股案例分享...
钱江会计实务精英讲坛预告第84期 # 主题 战略视角下之财务分析应用实践 --兼选股案例分享 # 时间 2020年12月25日 2:00 pm---4:00 pm # 地点 C楼213 主讲人简介 何 ...
- 某大型数据中心离心式冷水机组 控制板UPS电源改造项目案例分享
摘 要 离心式冷水机组作为大部分数据中心的核心设备,其是否稳定.安全运行决定着数据中心制冷系统的安全运行.本文分析了某大型数据中心离心式冷水机组控制板UPS电源改造创新案例,分析了改造项目过程中可 ...
- 批次管理的质量跟踪案例分享_食品加工行业
批次管理的质量跟踪案例分享_食品加工行业 最近接触了一个食品行业的项目,针对食品行业有几大特点和行业的特殊性: 1.保质期的控制与管理 2.物料进行化学实验 3.原料采购时扣率 4.物料进行批次跟踪 ...
最新文章
- Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用
- Science:又一明星菌群可以调控肠道免疫?
- python gui编程框架_工程师必知的几个Python GUI框架
- Java黑皮书课后题第8章:*8.24(检验数独的解决方案)程序清单8-4通过检测棋盘上的每个数字是否是有效的,从而检验一个解决方案是否是有效的。重写该程序,通过检验是否每行、每列、每个小方盒中具有
- 后端学习 - RabbitMQ
- 组合数(codevs 1631)
- 私有镜像仓库的部署与使用方法
- 以太坊Bloom过滤器实现原理及应用场景分析
- 深入计算机组成原理(二十七)SIMD:如何加速矩阵乘法
- python为什么叫胶水语言-为什么称python为胶水语言
- 手把手式介绍 ADNI 影像数据下载
- 主动降噪python_尝试使用Pyadi主动降噪时遇到错误
- 线上靶机prompt.ml
- 旋转目标检测 校准的深度特征用于目标检测SSA
- 996M11鹅厂这些互联网行业“黑话”,你知多少?
- 腾讯云轻量服务器Centos 7.6安装redis 5.0.4教程
- 【Ubuntu】Ubuntu16.04 安装显卡驱动重启黑屏问题处理
- 7-5 手机号码 (20 分)
- 无法启用网络发现的解决方法
- 如何安装和搭建wordpress个人网站(超详细+零基础)
热门文章
- 楼上有钢珠落地的声音,哒、哒、哒现象的科学解释
- 【转】window7下Word 2007报“Microsoft office word已停止工作“
- SVG 详解(四)其他常用标签
- 【Unity】Git上传Unity工程GitHub
- 业务理解:深入业务是做好架构的前提
- html textarea设置只读属性吗,HTML
- mysql创建函数报1064错误的解决方案
- 全国计算机一级考试试题讲解,2015全国计算机一级考试Msoffice模拟试题(五)答案及解析...
- 正弦信号发生器的设计
- 【PSOC4】+内部资源充分利用--ADC、UART、LCD、CapSense等