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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM