From 90a87e6e4d8ed8da51752fffcab8960c729378eb Mon Sep 17 00:00:00 2001 From: PixelEnvision Date: Thu, 30 Mar 2017 20:42:37 +0000 Subject: [PATCH] I've found out today that Unity's ScrollRect is behaving erratic when more than one touch is used for drag. I think that's a bug with UI. It jumps between fingers (to moving one), this script fixes it by blocking event data based on touch id. --- Scripts/Utilities/ScrollRectMultiTouchFix.cs | 45 ++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Scripts/Utilities/ScrollRectMultiTouchFix.cs diff --git a/Scripts/Utilities/ScrollRectMultiTouchFix.cs b/Scripts/Utilities/ScrollRectMultiTouchFix.cs new file mode 100644 index 0000000..2ee875a --- /dev/null +++ b/Scripts/Utilities/ScrollRectMultiTouchFix.cs @@ -0,0 +1,45 @@ +/// Credit Erdener Gonenc - @PixelEnvision +/*USAGE: Simply use that instead of the regular ScrollRect */ + +using System; +using UnityEngine.EventSystems; + +namespace UnityEngine.UI.Extensions +{ + [AddComponentMenu ("UI/Extensions/ScrollRectMultiTouchFix")] + public class ScrollRectMultiTouchFix : ScrollRect + { + + private int pid = -100; + + /// + /// Begin drag event + /// + public override void OnBeginDrag (UnityEngine.EventSystems.PointerEventData eventData) + { + pid = eventData.pointerId; + base.OnBeginDrag (eventData); + } + + /// + /// Drag event + /// + public override void OnDrag (UnityEngine.EventSystems.PointerEventData eventData) + { + if (pid == eventData.pointerId) + base.OnDrag (eventData); + } + + /// + /// End drag event + /// + public override void OnEndDrag (UnityEngine.EventSystems.PointerEventData eventData) + { + if (pid == eventData.pointerId) { + pid = -100; + base.OnEndDrag (eventData); + } + } + + } +} \ No newline at end of file