UGUI解决嵌套使用多个ScrollRect时的Drag拖动冲突问题

很简单,直接看代码:

 1 using UnityEngine.UI;
 2 using UnityEngine.EventSystems;
 3 using UnityEngine;
 4 
 5 /// <summary>
 6 /// 解决嵌套使用ScrollRect时的Drag冲突问题。请将该脚本放置到内层ScrollRect上(外层的ScrollRect的Drag事件会被内层的拦截)
 7 /// </summary>
 8 public class NestedScrollRect : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
 9 {
10     /// <summary>
11     /// 外层被拦截需要正常拖动的ScrollRect,可不指定,默认在父对象中找
12     /// </summary>
13     public ScrollRect anotherScrollRect;
14     /// <summary>
15     /// 当前的ScrollRect(本脚本所放置的物体上)的拖动方向默认为上下拖动,否则为左右拖动型
16     /// </summary>
17     public bool thisIsUpAndDown = true;
18 
19     private ScrollRect thisScrollRect;
20 
21     void Awake ()
22     {
23         thisScrollRect = GetComponent<ScrollRect> ();
24         if (anotherScrollRect == null)
25             anotherScrollRect = GetComponentsInParent<ScrollRect> ()[1];
26     }
27 
28     public void OnBeginDrag (PointerEventData eventData)
29     {
30         anotherScrollRect.OnBeginDrag (eventData);
31     }
32 
33     public void OnDrag (PointerEventData eventData)
34     {
35         anotherScrollRect.OnDrag (eventData);
36         float angle = Vector2.Angle (eventData.delta, Vector2.up);
37         //判断拖动方向,防止水平与垂直方向同时响应导致的拖动时整个界面都会动
38         if (angle > 45f && angle < 135f)
39         {
40             thisScrollRect.enabled = !thisIsUpAndDown;
41             anotherScrollRect.enabled = thisIsUpAndDown;
42         }
43         else
44         {
45             anotherScrollRect.enabled = !thisIsUpAndDown;
46             thisScrollRect.enabled = thisIsUpAndDown;
47         }
48     }
49 
50     public void OnEndDrag (PointerEventData eventData)
51     {
52         anotherScrollRect.OnEndDrag (eventData);
53         anotherScrollRect.enabled = true;
54         thisScrollRect.enabled = true;
55     }
56 }

 

转载于:https://www.cnblogs.com/suoluo/p/5643885.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值