unity 的 NGUI 中UIScrollView怎样使得上下drag和左右drag互不影响

比如形式上 123 是一个 horizontal uiscrollview ,而 2 ,3各含一个verticview,

2中的scrollview 的名字为 Item,即Item是2的子物体,2,3中都有个内置脚本

UIDragScrollView.cs(重命名后会失效),2子物体Item中有UIScrollView,现在

要达到一种效果,当touch屏幕时如果确定为123的左右移动,那么此时上下移动

不会有影响,反之效果也是。方法如下:

在dataAll.cs这是个存放了很多静态变量的脚本,加一个public static bool upDown;

判断当前是否上下移动。下面要修改NGUI自带的脚本:

在UIDragScrollView.cs里面添加变量 int timesIn初始化为0,表示第几次进入

void OnDrag(Vector2 delta),在此函数中加代码

if(timesIn==0)
            timesIn++;
        if (timesIn == 1) {
            if(Mathf.Abs(delta.x)>Mathf.Abs(delta.y))
            {
                dataAll.upDown=false;
            }
            else
                dataAll.upDown=true;
            timesIn++;
        }

另加 OnPressEnd(){timesIn=0;}

在UIScrollView.cs中加代码

if (movement == Movement.Horizontal)
                    {
                        offset.y = 0f;
                        offset.z = 0f;

                     //此处为添加项
                        if(dataAll.upDown==true)
                            offset.x=0f;
                    }
                    else if (movement == Movement.Vertical)
                    {
                        offset.x = 0f;
                        offset.z = 0f;

                    //此处为添加项,乘以个常数是因为2,3的滑动灵敏度不同
                        if(transform.name=="Item")
                        {
                            //print ("kkk");
                            offset.y*=2.0f;
                        }

                    //此处为添加项
                        if(dataAll.upDown==false)
                            offset.y=0f;
                        
                    }

你可能感兴趣的:(unity 的 NGUI 中UIScrollView怎样使得上下drag和左右drag互不影响)