一、简介
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上挂载脚本,负责处理手势控制,如下图:
到这里配置结束,就可以运行游戏进行相应手势操作了。文章来源:https://www.toymoban.com/news/detail-851355.html
谢谢大家,有问题可以私信,看到了就会回复。文章来源地址https://www.toymoban.com/news/detail-851355.html
到了这里,关于Unity 触控插件LeanTouch/LeanTouch+教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!