当前位置:   article > 正文

Unity 触控插件LeanTouch/LeanTouch+教程_lean touch插件

lean touch插件

一、简介

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 提供了丰富多样的手势控制功能,使开发者能够轻松实现各种交互效果。除了常见的单指触摸、双指缩放、旋转和拖动之外,它还支持多点触控,能够同时处理多个触摸点,从而实现更加丰富和灵活的用户操作体验。


在这里只简单介绍一下几种常见手势:

直接上代码!

  1. using Lean.Touch;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class BasicLeanTouchLearn : MonoBehaviour
  5. {
  6. /// <summary>
  7. /// 物体旋转处理
  8. /// </summary>
  9. protected LeanPitchYawChildren _pitchYawChildren;
  10. /// <summary>
  11. /// 处理手指移动
  12. /// </summary>
  13. private LeanFingerUpdate _fingerUpdate;
  14. /// <summary>
  15. /// 手指长按处理
  16. /// </summary>
  17. protected LeanFingerHeld _fingerHeld;
  18. protected LeanFingerTap _fingerTap;
  19. /// <summary>
  20. /// 风扇水平旋转
  21. /// </summary>
  22. [SerializeField] protected LeanPitchYawTargets _yawTarget;
  23. /// <summary>
  24. /// 风扇垂直旋转
  25. /// </summary>
  26. [SerializeField] protected LeanPitchYawTargets _pitchTarget;
  27. /// <summary>
  28. /// 拖动区域碰撞盒
  29. /// </summary>
  30. protected Collider _collider;
  31. protected void Awake()
  32. {
  33. _pitchYawChildren = GetComponent<LeanPitchYawChildren>();
  34. _fingerUpdate = GetComponent<LeanFingerUpdate>();
  35. _fingerHeld = GetComponent<LeanFingerHeld>();
  36. _fingerTap = GetComponent<LeanFingerTap>();
  37. _collider = _fingerHeld.RequiredSelectable.GetComponent<Collider>();
  38. }
  39. protected virtual void OnEnable()
  40. {
  41. AddListener();
  42. }
  43. public void AddListener()
  44. {
  45. //添加监听
  46. //移动时旋转
  47. _fingerUpdate.OnDelta.AddListener(Rotate);
  48. //手指按下时选中
  49. _fingerHeld.OnFingerDown.AddListener(OnFanSelected);
  50. //手指抬起时取消选中
  51. _fingerHeld.OnFingerUp.AddListener(OnFanDeselected);
  52. //手指点击
  53. _fingerTap.OnFinger.AddListener(HandleFingerTap);
  54. //物体上下角度修改回调
  55. _pitchTarget.OnPitchChange.AddListener(OnPitchChange);
  56. //物体左右角度修改回调
  57. _yawTarget.OnYawChanged.AddListener(OnYawChange);
  58. //手势控制
  59. LeanTouch.OnGesture += OnGesture;
  60. }
  61. /// <summary>
  62. /// 通过手指输入,控制角度
  63. /// </summary>
  64. /// <param name="delta"></param>
  65. protected virtual void Rotate(Vector2 delta)
  66. {
  67. _pitchYawChildren.Rotate(delta);
  68. }
  69. /// <summary>
  70. /// 被选中
  71. /// </summary>
  72. /// <param name="leanFinger"></param>
  73. protected void OnFanSelected(LeanFinger leanFinger)
  74. {
  75. Debug.Log($"OnFanSelected {JsonUtility.ToJson(leanFinger)}");
  76. }
  77. /// <summary>
  78. /// 取消选中
  79. /// </summary>
  80. /// <param name="leanFinger"></param>
  81. protected virtual void OnFanDeselected(LeanFinger leanFinger)
  82. {
  83. Debug.Log($"OnFanDeselected {JsonUtility.ToJson(leanFinger)}");
  84. }
  85. /// <summary>
  86. /// 上下角度修改回调
  87. /// </summary>
  88. /// <param name="pitch"></param>
  89. protected void OnPitchChange(float pitch)
  90. {
  91. //这里 Unity 里设定了旋转角度为-15到15之间,映射到0到100。
  92. var value = (int)RemapClamped(pitch, _pitchTarget.PitchMin, _pitchTarget.PitchMax, 0, 100);
  93. Debug.Log($"OnPitchChange value: {value}");
  94. }
  95. /// <summary>
  96. /// 左右角度修改回调
  97. /// </summary>
  98. /// <param name="yaw"></param>
  99. protected void OnYawChange(float yaw)
  100. {
  101. // 这里 Unity 里设定了旋转角度为-12到12之间,映射到0到100。
  102. var value = (int)RemapClamped(yaw, _yawTarget.YawMin, _yawTarget.YawMax, 0, 100);
  103. Debug.Log($"OnYawChange value: {value}");
  104. }
  105. /// <summary>
  106. /// 映射
  107. /// </summary>>
  108. public float RemapClamped(float aValue, float aIn1, float aIn2, float aOut1, float aOut2)
  109. {
  110. float t = (aValue - aIn1) / (aIn2 - aIn1);
  111. if (t > 1f)
  112. return aOut2;
  113. if (t < 0f)
  114. return aOut1;
  115. return aOut1 + (aOut2 - aOut1) * t;
  116. }
  117. /// <summary>
  118. /// 点击
  119. /// </summary>
  120. protected void HandleFingerTap(LeanFinger finger)
  121. {
  122. //获取点击次数
  123. Debug.Log($"FingerTap :{finger.TapCount}");
  124. }
  125. /// <summary>
  126. /// 手势控制
  127. /// </summary>
  128. /// <param name="fingers"></param>
  129. public void OnGesture(List<LeanFinger> fingers)
  130. {
  131. //如果为单手则返回
  132. if (fingers.Count <= 1) return;
  133. //捏合
  134. if (LeanGesture.GetPinchRatio(fingers) > 1.1f)
  135. {
  136. Debug.Log("Pinch Gesture");
  137. }
  138. //张开
  139. else if (LeanGesture.GetPinchRatio(fingers) < 0.9f)
  140. {
  141. Debug.Log("Open Gesture");
  142. }
  143. }
  144. }

三、配置项

创建一个空物体,分层结构如下:

为了实现触摸,可以使用 LeanSelectable By Finger 组件: 这是一种简单的方式,可以通过将该组件添加到游戏对象上来启用触摸交互。但这并不是必须的,适用于应用场景比较简单,不需要复杂的触摸操作。具体组件配置如下,Yaw负责触控和上下旋转:

Pitch负责水平旋转,组件配置如下:

在LeanFinger上挂载脚本,负责处理手势控制,如下图:

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/652226
推荐阅读
相关标签
  

闽ICP备14008679号