Unity 触控插件LeanTouch/LeanTouch+教程

一、简介

LeanTouch 和 LeanTouch+ 是针对移动触摸设备的输入解决方案。它们提供了一套简单易用的 API,用于处理移动设备上的触摸输入,并且支持各种手势,如拖动、缩放、旋转等。

主要特点和功能:

  1. 支持多平台: LeanTouch 和 LeanTouch+ 可以在 iOS、Android、Windows 和 macOS 等各种平台上使用。

  2. 简单易用: 这两个插件提供了简洁易懂的 API,使得开发者可以轻松地处理触摸输入,而不必自己编写复杂的代码。

  3. 支持多种手势: LeanTouch 和 LeanTouch+ 支持常见的手势,如单指触摸、双指缩放、双指旋转、双指拖动等。这些手势可以方便地用于游戏和应用程序的交互设计。

  4. 自定义灵活性: 这两个插件提供了丰富的配置选项,开发者可以根据自己的需求进行定制。比如可以调整触摸灵敏度、手势识别的阈值等。

  5. 支持物理交互: LeanTouch 和 LeanTouch+ 还支持物理交互,可以将触摸输入转换为物理力或运动,从而实现更加真实的交互效果。

  6. 文档和示例丰富: 它们都提供了详细的文档和示例,方便开发者学习和使用。同时还有社区支持,可以在社区中获取帮助和交流经验。

官方地址: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上挂载脚本,负责处理手势控制,如下图:

到这里配置结束,就可以运行游戏进行相应手势操作了。

谢谢大家,有问题可以私信,看到了就会回复。

补充一下遗漏的点:Unity 触控插件LeanTouch/LeanTouch+教程——续-CSDN博客

  • 27
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值