В настоящее время ScrollRect
чрезвычайно глючит, когда речь заходит о мультитач на мобильных устройствах.
Если вы попробуете это сами, вы увидите, что всякий раз, когда вы кладете два пальца на экран, контентбудет прыгать и выдавать неожиданное поведение.
Есть ли какие-либо решения для этого?В настоящее время это - единственное решение, которое я нашел, но в некоторых случаях оно по-прежнему содержит ошибки и, что более важно, не определяет среднюю позицию ввода (или MultiTouchPosition
) для всех ваших пальцев на экране.
Вот моя модифицированная версия сценария MultiTouchScrollRect.cs
из UnityUIExtensions
битбакета, но он каждый раз выскакивает, когда я указываю на экран следующим пальцем:
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class MultiTouchScrollRect : ScrollRect
{
private int minimumTouchCount = 1, maximumTouchCount = 2, pointerId = -100;
public Vector2 MultiTouchPosition
{
get
{
Vector2 position = Vector2.zero;
for (int i = 0; i < Input.touchCount && i < maximumTouchCount; i++)
{
position += Input.touches[i].position;
}
position /= ((Input.touchCount <= maximumTouchCount) ? Input.touchCount : maximumTouchCount);
return position;
}
}
public override void OnBeginDrag(PointerEventData eventData)
{
if (Input.touchCount >= minimumTouchCount)
{
pointerId = eventData.pointerId;
eventData.position = MultiTouchPosition;
base.OnBeginDrag(eventData);
}
}
public override void OnDrag(PointerEventData eventData)
{
if (Input.touchCount >= minimumTouchCount)
{
eventData.position = MultiTouchPosition;
if (pointerId == eventData.pointerId)
{
base.OnDrag(eventData);
}
}
}
public override void OnEndDrag(PointerEventData eventData)
{
if (Input.touchCount >= minimumTouchCount)
{
pointerId = -100;
eventData.position = MultiTouchPosition;
base.OnEndDrag(eventData);
}
}
}
Спасибоза ваше время!