0
点赞
收藏
分享

微信扫一扫

Unity(三十三):ScrollView嵌套


效果

Unity(三十三):ScrollView嵌套_unity

布局

Unity(三十三):ScrollView嵌套_c#_02

脚本

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class CustomScrollRect : ScrollRect
{
private CustomScrollRect _parent;

private enum Direction
{
Horizontal,
Vertical
}

// 滑动方向
private Direction _direction;
// 操作方向
private Direction _beginDragDirection;

protected override void Awake()
{
base.Awake();
if (transform.parent)
{
_parent = transform.parent.GetComponentInParent<CustomScrollRect>();
}
_direction = horizontal ? Direction.Horizontal : Direction.Vertical;
}

// 开始拖动时已选择控制柄
public override void OnBeginDrag(PointerEventData eventData)
{
if (_parent)
{
_beginDragDirection = Mathf.Abs(eventData.delta.x) > Mathf.Abs(eventData.delta.y) ? Direction.Horizontal : Direction.Vertical;
if (_beginDragDirection != _direction)
{
// 当前操作方向不等于滑动方向,将事件传给父对象
ExecuteEvents.Execute(_parent.gameObject, eventData, ExecuteEvents.beginDragHandler);
return;
}
}
base.OnBeginDrag(eventData);
}

// 拖动内容时的处理
public override void OnDrag(PointerEventData eventData)
{
if (_parent)
{
if (_beginDragDirection != _direction)
{
// 当前操作方向不等于滑动方向,将事件传给父对象
ExecuteEvents.Execute(_parent.gameObject, eventData, ExecuteEvents.dragHandler);
return;
}
}
base.OnDrag(eventData);
}

// 完成内容拖动时的处理
public override void OnEndDrag(PointerEventData eventData)
{
if (_parent)
{
if (_beginDragDirection != _direction)
{
// 当前操作方向不等于滑动方向,将事件传给父对象
ExecuteEvents.Execute(_parent.gameObject, eventData, ExecuteEvents.endDragHandler);
return;
}
}
base.OnEndDrag(eventData);
}

public override void OnScroll(PointerEventData data)
{
if (_parent)
{
if (_beginDragDirection != _direction)
{
// 当前操作方向不等于滑动方向,将事件传给父对象
ExecuteEvents.Execute(_parent.gameObject, data, ExecuteEvents.scrollHandler);
return;
}
}
base.OnScroll(data);
}
}


举报

相关推荐

0 条评论