草庐IT

【Unity】LeanTouch实现ScrollView与UI拖拽兼容

朗迹 - 张伟 2023-04-03 原文

官方API: http://carloswilkes.com/Documentation/LeanTouch
插件地址:https://assetstore.unity.com/packages/tools/input-management/lean-touch-30111

LeanTouch

LeanTouch是一款Unity触控插件,集成触控屏各类操作,是常用插件之一。
Demo测试了使用LeanTouch,实现多个UI框独立拖拽。并在UI框里加入ScrollView文字拖动框,实现了2者拖拽的兼容。

Unity版本:2021.3.6f1c1
Lean Touch 3.0.0
Demo源码:https://download.csdn.net/download/qq_17523181/86904941

步骤一:创建一个基础

  • 通过Package Manager -> My Assets -> 安装Lean Touch
  • 在Hierarchy里,右键 -> Lean -> Touch创建基础插件(LeanTouch)
  • 制作2个带ScroolView的UI

步骤二:实现简单拖动

  • 在Box(1)里加入LeanDragTranslate脚本,这时若运行,发现Box(1)不能被拖动;
  • 把Bg图片的Raycast Target去掉,发现Box(1)可以拖动了,但是需要点在Box(1)的外部;
  • 去掉Box(1)的LeanDragTranslate脚本的Ignore Started Over Gui的勾,发现Box(1)内部也可以拖动了

LeanTouch的拖动响应是会被UI层遮挡掉的。所以需要去Bg图片的Raycast Target;去掉Ignore Started Over Gui的勾,来确定这个UI层是需要Touch响应的。

步骤三:两个Box能单独拖动

  • 在Box(2)里也加入LeanDragTranslate脚本,LeanDragTranslate脚本的Ignore Started Over Gui的勾去掉。发现拖动是2个Box同时的,不能单独拖动。
  • 在Box(1)里加入Lean Selectable By Finger脚本,运行,发现Box(1)不能被拖动了,但是Box(2)可以被拖动,因为默认Lean Selectable By Finger脚本是未选中状态。所以Box(1)在未选中状态下是不可以被拖动的。
  • 在运行状态下,我们勾下Self Selected,发现2个Box都可以被拖动了。接下来,就是利用这一个功能来实现Box单独拖动。
  • 接下来,使用LeanFingerDown + LeanSelectByFinger来实现触发LeanSelectableByFinger;在LeanTouch的对象里(基础组件),加入这2个脚本。(不是在Box层上)
  • LeanFingerDown这里,需要去掉Gui的勾,OnFinger与LeanSelectByFinger脚本触发绑定起来。

整体流程:Finger点击后,触发射线,射线射中有Selectabe的对象,使之打上勾。

  • 此时运行,发现在背景处拖动,Box不会别拖动,在Box1上拖动,Box2不会被动。继续拖动Box2,发现2个Box都同时拖动了。因为此时2个Box都已经打上Selectable的勾。接下来,要实现如何去勾
  • 在LeanSelectByFinger里,勾上Deselect With Nothing。当我点击背景时,2个Box的Selectable的勾会去掉。
  • 此时,当我点击Box1拖动,再点下Bg,再点下Box2时,Box2可以单独拖动了。但是,若点Box1后直接点Box2,2个Box还是会同时被拖动。
  • 在Box的LeanSelectableByFinger里,配置Events,OnSelected Select Finger Up,当鼠标抬起时,运行自己的Deselect()函数。
  • 此时已经实现了2个Box可以独立拖动了

步骤四:兼容ScrollView的拖动

  • 此时,发现当我拖动ScrollView框时,Box也同时拖动,而ScrollView的拖动响应就非常不灵敏了。

  • 接下来要实现,当拖动ScrollView时,Box不拖动,拖动Box的其他区域,Box仍然可以拖动;

  • 当运行时,去掉Selectable的勾,ScrollView就可正常拖动;若去掉ScrollRect的勾,拖动也不受影响;另外,LeanSelectByFinger有一个Layers,响应层的设置。使用这3个功能组合,实现兼容。

  • 先去掉2个Box上Image的RaycastTarget勾,此时2个Box都不能拖动了;当在ScrollView上反而可以拖动。

  • 在Box层下,建立一个Drag,里面加入一些Image,颜色调成透明,布局在可以拖动的区域

  • 把ScrollView设置一个新的Layer,可以取名为 CannotDrag

  • 在LeanSelectByFinger里,把CannotDrag的勾去掉

此时功能完成,祝福大家一切顺利~

有关【Unity】LeanTouch实现ScrollView与UI拖拽兼容的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  3. ruby-on-rails - 如何在 Ruby on Rails 中实现由 JSF 2.0 (Primefaces) 驱动的 UI 魔法 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道ruby​​onrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim

  4. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  5. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  6. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  7. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  8. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  9. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  10. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

随机推荐