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.

pull/413/head
PixelEnvision 2017-03-30 20:42:37 +00:00
parent 08c16817eb
commit 90a87e6e4d
1 changed files with 45 additions and 0 deletions

View File

@ -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;
/// <summary>
/// Begin drag event
/// </summary>
public override void OnBeginDrag (UnityEngine.EventSystems.PointerEventData eventData)
{
pid = eventData.pointerId;
base.OnBeginDrag (eventData);
}
/// <summary>
/// Drag event
/// </summary>
public override void OnDrag (UnityEngine.EventSystems.PointerEventData eventData)
{
if (pid == eventData.pointerId)
base.OnDrag (eventData);
}
/// <summary>
/// End drag event
/// </summary>
public override void OnEndDrag (UnityEngine.EventSystems.PointerEventData eventData)
{
if (pid == eventData.pointerId) {
pid = -100;
base.OnEndDrag (eventData);
}
}
}
}