152 lines
5.0 KiB
C#
152 lines
5.0 KiB
C#
using GameLogic;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.EventSystems;
|
||
using UnityEngine.UI;
|
||
public class MyScrollRect : ScrollRect
|
||
{
|
||
|
||
//上层ScrollRect
|
||
private ScrollRect upperScroll;
|
||
private EventTriggerListener etl;
|
||
|
||
public RectTransform upperScrollView;
|
||
public RectTransform upperScrollRect;
|
||
//方向
|
||
private enum Direction
|
||
{
|
||
Horizontal,
|
||
Vertical
|
||
}
|
||
//预设滑动方向
|
||
private Direction dir;
|
||
//当前操作方向
|
||
private Direction dragDir;
|
||
|
||
public enum ScrollGroupType
|
||
{
|
||
ScrollRect_ScrollView,
|
||
ScrollRect_ScrollRect
|
||
}
|
||
public ScrollGroupType scrollGroupType;
|
||
|
||
protected override void Awake()
|
||
{
|
||
//找到父对象
|
||
//Transform parent = transform.parent;
|
||
if (upperScrollRect && scrollGroupType == ScrollGroupType.ScrollRect_ScrollRect)
|
||
{
|
||
upperScroll = upperScrollRect.GetComponentInParent<ScrollRect>();
|
||
}
|
||
if (horizontal && vertical)
|
||
{
|
||
vertical = false;
|
||
Debug.LogWarning("不能同时选择Horizontal和Vertical,同时选择时默认仅Horizontal");
|
||
}
|
||
dir = horizontal ? Direction.Horizontal : Direction.Vertical;
|
||
base.Awake();
|
||
}
|
||
protected override void Start()
|
||
{
|
||
if (upperScrollView && scrollGroupType == ScrollGroupType.ScrollRect_ScrollView)
|
||
{
|
||
RectTransform ScrollCycleViewTrans = (RectTransform)upperScrollView.transform.Find("ScrollCycleView");
|
||
if(ScrollCycleViewTrans)
|
||
{
|
||
etl = ScrollCycleViewTrans.GetComponentInParent<EventTriggerListener>();
|
||
}
|
||
}
|
||
base.Start();
|
||
}
|
||
|
||
|
||
public override void OnBeginDrag(PointerEventData eventData)
|
||
{
|
||
if (etl && scrollGroupType == ScrollGroupType.ScrollRect_ScrollView)
|
||
{
|
||
//判断手势方向
|
||
dragDir = Mathf.Abs(eventData.delta.x) > Mathf.Abs(eventData.delta.y) ? Direction.Horizontal : Direction.Vertical;
|
||
if (dragDir != dir)
|
||
{//当前滑动方向不等于ScrollRect预设方向,故执行上层ScrollRect事件
|
||
etl.OnBeginDrag(eventData);
|
||
return;
|
||
}
|
||
}
|
||
if (upperScroll && scrollGroupType == ScrollGroupType.ScrollRect_ScrollRect)
|
||
{
|
||
//判断手势方向
|
||
dragDir = Mathf.Abs(eventData.delta.x) > Mathf.Abs(eventData.delta.y) ? Direction.Horizontal : Direction.Vertical;
|
||
if (dragDir != dir)
|
||
{//当前滑动方向不等于ScrollRect预设方向,故执行上层ScrollRect事件
|
||
upperScroll.OnBeginDrag(eventData);
|
||
return;
|
||
}
|
||
}
|
||
base.OnBeginDrag(eventData);
|
||
}
|
||
public override void OnDrag(PointerEventData eventData)
|
||
{
|
||
if (etl && scrollGroupType == ScrollGroupType.ScrollRect_ScrollView)
|
||
{
|
||
if (dragDir != dir)
|
||
{//当前滑动方向不等于ScrollRect预设方向,故执行上层ScrollRect事件
|
||
etl.OnDrag(eventData);
|
||
return;
|
||
}
|
||
}
|
||
if (upperScroll && scrollGroupType == ScrollGroupType.ScrollRect_ScrollRect)
|
||
{
|
||
Debug.LogError(dragDir);
|
||
Debug.LogError(dir);
|
||
if (dragDir != dir)
|
||
{//当前滑动方向不等于ScrollRect预设方向,故执行上层ScrollRect事件
|
||
upperScroll.OnDrag(eventData);
|
||
return;
|
||
}
|
||
}
|
||
base.OnDrag(eventData);
|
||
}
|
||
|
||
public override void OnEndDrag(PointerEventData eventData)
|
||
{
|
||
if (etl && scrollGroupType == ScrollGroupType.ScrollRect_ScrollView)
|
||
{
|
||
if (dragDir != dir)
|
||
{//当前滑动方向不等于ScrollRect预设方向,故执行上层ScrollRect事件
|
||
etl.OnEndDrag(eventData);
|
||
return;
|
||
}
|
||
}
|
||
if (upperScroll && scrollGroupType == ScrollGroupType.ScrollRect_ScrollRect)
|
||
{
|
||
if (dragDir != dir)
|
||
{//当前滑动方向不等于ScrollRect预设方向,故执行上层ScrollRect事件
|
||
upperScroll.OnEndDrag(eventData);
|
||
return;
|
||
}
|
||
}
|
||
base.OnEndDrag(eventData);
|
||
}
|
||
|
||
public override void OnScroll(PointerEventData data)
|
||
{
|
||
if (etl && scrollGroupType == ScrollGroupType.ScrollRect_ScrollView)
|
||
{
|
||
if (dragDir != dir)
|
||
{//当前滑动方向不等于ScrollRect预设方向,故执行上层ScrollRect事件
|
||
etl.OnScroll(data);
|
||
return;
|
||
}
|
||
}
|
||
if (upperScroll && scrollGroupType == ScrollGroupType.ScrollRect_ScrollRect)
|
||
{
|
||
if (dragDir != dir)
|
||
{//当前滑动方向不等于ScrollRect预设方向,故执行上层ScrollRect事件
|
||
upperScroll.OnScroll(data);
|
||
return;
|
||
}
|
||
}
|
||
base.OnScroll(data);
|
||
}
|
||
} |