在移动端游戏中,上滑/滑动触发还蛮常见的,但是没有搜到比较简洁的实现方式。下面是我自己写的一个思路
float AccumulatedSlidingDistance = 0;
Vector3 lastPos = -Vector3.zero;
Transform TargetRegion;//目标UI物体,必须有组件GraphicRaycaster
void FixedUpdate()
{
if (Input.GetMouseButton(0))
{
if (lastPos != -Vector3.zero && lastPos.y - Input.mousePosition.y<0 && IsPointerOverUIObject(TargetRegion, Input.mousePosition))
{
AccumulatedSlidingDistance += lastPos.y - Input.mousePosition.y;
lastPos = Input.mousePosition;
}
else
{
AccumulatedSlidingDistance = 0;
lastPos = Input.mousePosition;
}
if (AccumulatedSlidingDistance <= -300 && IsPointerOverUIObject(TargetRegion, Input.mousePosition))
{
Debug.Log($"累计滑动距离达标{AccumulatedSlidingDistance}");
AccumulatedSlidingDistance = 0;
lastPos = -Vector3.zero;
}
}
else
{
AccumulatedSlidingDistance = 0;
lastPos = -Vector3.zero;
}
}
public bool IsPointerOverUIObject(Transform canvas, Vector2 screenPosition)
{
PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
eventDataCurrentPosition.position = screenPosition;
GraphicRaycaster uiRaycaster = canvas.GetComponent<GraphicRaycaster>();
List<RaycastResult> results = new List<RaycastResult>();
uiRaycaster.Raycast(eventDataCurrentPosition, results);
return results.Count > 0;
}