問題記錄: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;