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;
posted @ 2020-09-18 11:02  九梦岛主  阅读(1167)  评论(0编辑  收藏  举报