UGUI实现Scroll嵌套

自定义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);
        }
    }
}

发布了67 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Icecoldless/article/details/103730209