zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    求一个数的阶乘在 m 进制下末尾 0 的个数
    区间dp
    最长公共子序列变形
    学习stm32专区
    C/C++中static关键字详解
    ASP.NET调用Office Com组件权限设置
    TreeView控件
    SQL笔记(1)索引/触发器
    NPOI 1.2.5 教程
    SQL Povit
  • 原文地址:https://www.cnblogs.com/suoluo/p/5643885.html
Copyright © 2011-2022 走看看