赞
踩
LeanTouch 和 LeanTouch+ 是针对移动触摸设备的输入解决方案。它们提供了一套简单易用的 API,用于处理移动设备上的触摸输入,并且支持各种手势,如拖动、缩放、旋转等。
主要特点和功能:
支持多平台: LeanTouch 和 LeanTouch+ 可以在 iOS、Android、Windows 和 macOS 等各种平台上使用。
简单易用: 这两个插件提供了简洁易懂的 API,使得开发者可以轻松地处理触摸输入,而不必自己编写复杂的代码。
支持多种手势: LeanTouch 和 LeanTouch+ 支持常见的手势,如单指触摸、双指缩放、双指旋转、双指拖动等。这些手势可以方便地用于游戏和应用程序的交互设计。
自定义灵活性: 这两个插件提供了丰富的配置选项,开发者可以根据自己的需求进行定制。比如可以调整触摸灵敏度、手势识别的阈值等。
支持物理交互: LeanTouch 和 LeanTouch+ 还支持物理交互,可以将触摸输入转换为物理力或运动,从而实现更加真实的交互效果。
文档和示例丰富: 它们都提供了详细的文档和示例,方便开发者学习和使用。同时还有社区支持,可以在社区中获取帮助和交流经验。
官方地址:Lean Touch | Input Management | Unity Asset Store
LeanTouch 提供了丰富多样的手势控制功能,使开发者能够轻松实现各种交互效果。除了常见的单指触摸、双指缩放、旋转和拖动之外,它还支持多点触控,能够同时处理多个触摸点,从而实现更加丰富和灵活的用户操作体验。
在这里只简单介绍一下几种常见手势:
直接上代码!
- using Lean.Touch;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class BasicLeanTouchLearn : MonoBehaviour
- {
- /// <summary>
- /// 物体旋转处理
- /// </summary>
- protected LeanPitchYawChildren _pitchYawChildren;
-
- /// <summary>
- /// 处理手指移动
- /// </summary>
- private LeanFingerUpdate _fingerUpdate;
-
- /// <summary>
- /// 手指长按处理
- /// </summary>
- protected LeanFingerHeld _fingerHeld;
- protected LeanFingerTap _fingerTap;
-
- /// <summary>
- /// 风扇水平旋转
- /// </summary>
- [SerializeField] protected LeanPitchYawTargets _yawTarget;
-
- /// <summary>
- /// 风扇垂直旋转
- /// </summary>
- [SerializeField] protected LeanPitchYawTargets _pitchTarget;
-
- /// <summary>
- /// 拖动区域碰撞盒
- /// </summary>
- protected Collider _collider;
-
- protected void Awake()
- {
- _pitchYawChildren = GetComponent<LeanPitchYawChildren>();
- _fingerUpdate = GetComponent<LeanFingerUpdate>();
- _fingerHeld = GetComponent<LeanFingerHeld>();
- _fingerTap = GetComponent<LeanFingerTap>();
- _collider = _fingerHeld.RequiredSelectable.GetComponent<Collider>();
- }
-
- protected virtual void OnEnable()
- {
- AddListener();
- }
-
- public void AddListener()
- {
- //添加监听
- //移动时旋转
- _fingerUpdate.OnDelta.AddListener(Rotate);
-
- //手指按下时选中
- _fingerHeld.OnFingerDown.AddListener(OnFanSelected);
-
- //手指抬起时取消选中
- _fingerHeld.OnFingerUp.AddListener(OnFanDeselected);
-
- //手指点击
- _fingerTap.OnFinger.AddListener(HandleFingerTap);
-
- //物体上下角度修改回调
- _pitchTarget.OnPitchChange.AddListener(OnPitchChange);
-
- //物体左右角度修改回调
- _yawTarget.OnYawChanged.AddListener(OnYawChange);
-
- //手势控制
- LeanTouch.OnGesture += OnGesture;
- }
-
- /// <summary>
- /// 通过手指输入,控制角度
- /// </summary>
- /// <param name="delta"></param>
- protected virtual void Rotate(Vector2 delta)
- {
- _pitchYawChildren.Rotate(delta);
- }
-
- /// <summary>
- /// 被选中
- /// </summary>
- /// <param name="leanFinger"></param>
- protected void OnFanSelected(LeanFinger leanFinger)
- {
- Debug.Log($"OnFanSelected {JsonUtility.ToJson(leanFinger)}");
- }
-
- /// <summary>
- /// 取消选中
- /// </summary>
- /// <param name="leanFinger"></param>
- protected virtual void OnFanDeselected(LeanFinger leanFinger)
- {
- Debug.Log($"OnFanDeselected {JsonUtility.ToJson(leanFinger)}");
- }
-
- /// <summary>
- /// 上下角度修改回调
- /// </summary>
- /// <param name="pitch"></param>
- protected void OnPitchChange(float pitch)
- {
- //这里 Unity 里设定了旋转角度为-15到15之间,映射到0到100。
- var value = (int)RemapClamped(pitch, _pitchTarget.PitchMin, _pitchTarget.PitchMax, 0, 100);
- Debug.Log($"OnPitchChange value: {value}");
- }
-
- /// <summary>
- /// 左右角度修改回调
- /// </summary>
- /// <param name="yaw"></param>
- protected void OnYawChange(float yaw)
- {
- // 这里 Unity 里设定了旋转角度为-12到12之间,映射到0到100。
- var value = (int)RemapClamped(yaw, _yawTarget.YawMin, _yawTarget.YawMax, 0, 100);
- Debug.Log($"OnYawChange value: {value}");
- }
-
- /// <summary>
- /// 映射
- /// </summary>>
- public float RemapClamped(float aValue, float aIn1, float aIn2, float aOut1, float aOut2)
- {
- float t = (aValue - aIn1) / (aIn2 - aIn1);
- if (t > 1f)
- return aOut2;
- if (t < 0f)
- return aOut1;
- return aOut1 + (aOut2 - aOut1) * t;
- }
-
- /// <summary>
- /// 点击
- /// </summary>
- protected void HandleFingerTap(LeanFinger finger)
- {
- //获取点击次数
- Debug.Log($"FingerTap :{finger.TapCount}");
- }
-
- /// <summary>
- /// 手势控制
- /// </summary>
- /// <param name="fingers"></param>
- public void OnGesture(List<LeanFinger> fingers)
- {
- //如果为单手则返回
- if (fingers.Count <= 1) return;
-
- //捏合
- if (LeanGesture.GetPinchRatio(fingers) > 1.1f)
- {
- Debug.Log("Pinch Gesture");
- }
- //张开
- else if (LeanGesture.GetPinchRatio(fingers) < 0.9f)
- {
- Debug.Log("Open Gesture");
- }
-
- }
- }
创建一个空物体,分层结构如下:
为了实现触摸,可以使用 LeanSelectable By Finger 组件: 这是一种简单的方式,可以通过将该组件添加到游戏对象上来启用触摸交互。但这并不是必须的,适用于应用场景比较简单,不需要复杂的触摸操作。具体组件配置如下,Yaw负责触控和上下旋转:
Pitch负责水平旋转,组件配置如下:
在LeanFinger上挂载脚本,负责处理手势控制,如下图:
到这里配置结束,就可以运行游戏进行相应手势操作了。
谢谢大家,有问题可以私信,看到了就会回复。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。