自定义ScrollRect,第一次记录滑动的方向,父物体垂直滑动,子物体水平
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
namespace demospace
{
public class customScrollRect : ScrollRect
{
enum Direction
{
Horizontal,
Vertical
}
private Direction direction = Direction.Horizontal;
private Direction beginDir;
private Transform tranParent;
protected override void Start()
{
base.Start();
tranParent = transform.parent.parent;
direction = this.horizontal ? Direction.Horizontal : Direction.Vertical;
}
public override void OnBeginDrag(PointerEventData eventData)
{
beginDir = Mathf.Abs(eventData.delta.x) < Mathf.Abs(eventData.delta.y) ? Direction.Vertical : Direction.Horizontal;
if(direction!=beginDir) //垂直滑动
{
ExecuteEvents.Execute(tranParent.gameObject, eventData, ExecuteEvents.beginDragHandler);
return;
}
base.OnBeginDrag(eventData);
}
public override void OnDrag(PointerEventData eventData)
{
if (direction != beginDir)
{
ExecuteEvents.Execute(tranParent.gameObject, eventData, ExecuteEvents.dragHandler);
return;
}
base.OnDrag(eventData);
}
public override void OnEndDrag(PointerEventData eventData)
{
if (direction != beginDir)
{
ExecuteEvents.Execute(tranParent.gameObject, eventData, ExecuteEvents.endDragHandler);
return;
}
base.OnEndDrag(eventData);
}
public override void OnScroll(PointerEventData data)
{
if (Mathf.Abs(data.delta.x) < Mathf.Abs(data.delta.y))
{
//当前操作方向不等于滑动方向,将事件传给父对象
ExecuteEvents.Execute(tranParent.gameObject, data, ExecuteEvents.scrollHandler);
return;
}
base.OnScroll(data);
}
}
}