From 90a87e6e4d8ed8da51752fffcab8960c729378eb Mon Sep 17 00:00:00 2001 From: PixelEnvision Date: Thu, 30 Mar 2017 20:42:37 +0000 Subject: [PATCH 1/2] 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 From 4520bf26d79d1067850cea18104b82aa910dadbf Mon Sep 17 00:00:00 2001 From: PixelEnvision Date: Thu, 30 Mar 2017 22:40:57 +0000 Subject: [PATCH 2/2] ScrollRectMultiTouchFix.cs edited online with Bitbucket --- Scripts/Utilities/ScrollRectMultiTouchFix.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Scripts/Utilities/ScrollRectMultiTouchFix.cs b/Scripts/Utilities/ScrollRectMultiTouchFix.cs index 2ee875a..cf58c16 100644 --- a/Scripts/Utilities/ScrollRectMultiTouchFix.cs +++ b/Scripts/Utilities/ScrollRectMultiTouchFix.cs @@ -35,10 +35,8 @@ namespace UnityEngine.UI.Extensions /// public override void OnEndDrag (UnityEngine.EventSystems.PointerEventData eventData) { - if (pid == eventData.pointerId) { pid = -100; base.OnEndDrag (eventData); - } } }