FairyGUI触屏滑动手势灵敏度问题
问题记录:FairyGUI在手机触屏模式下,灵敏度不及PC端
解决方法:设置SwipeGesture对象
的snapping
属性为false
,修改UIConfig
类的touchDragSensitivity
属性,调低这个值,默认是10。以及修改actionDistance
属性,默认200。FairyGUI版本: 5.0.10
Unity版本:2018.4.9f1
源码分析
查看SwipeGesture.cs的源码,可以看到其中控制滑动灵敏以及滑动事件派发的属性有两个。
第一个是滑动有效距离的设置,主要是防止误操作的问题。这个属性影响onAction
事件的最终派发。
/// <summary>
/// The min distance to fire onAction event
/// 派发onAction事件的最小距离。如果手指扫过的距离少于此值,onAction不会触发(但onEnd仍然会派发)
/// </summary>
public int actionDistance;
第二个是拖动灵敏度的设置,这是一个全局设置,感觉是个大坑,改了这里也会同时影响ScrollPane
类的onPullDownRelease
以及onPullUpRelease
这两个事件的派发情况等。
// UIConfig.cs文件
/// <summary>
/// Pixel offsets of mouse pointer to trigger dragging.
/// </summary>
public static int clickDragSensitivity = 2;
拖动灵敏度在PC调试环境下是很难发现的,查看其中的源码可以知道,其在触摸屏及鼠标操作下是执行了两个完全不同的
sensitivity
if (!_started) { //灵敏度检查,为了和点击区分 int sensitivity; if (Stage.touchScreen) sensitivity = UIConfig.touchDragSensitivity; else sensitivity = 5; if (Mathf.Abs(delta.x) < sensitivity && Mathf.Abs(delta.y) < sensitivity) return; _started = true; onBegin.Call(evt); }
注意
如果发现设置了上面两项还是感觉不够灵敏,那就要考虑接下来的步骤。
最容易被忽视的一点,SwipeGesture
类默认情况下是会将滑动结果转换成整数来进行有效滑动判断,在滑动过程中, 偏移量 < 1
都是无效滑动,这应该也是防误触的考虑。如果游戏需要较高的灵敏度可以忽略这种误触,那么就需要考虑修改如下设置来达到效果。
/// <summary>
/// 是否把变化量强制为整数。默认true。
/// </summary>
public bool snapping;