如何检查vector2(触摸输入)是否在rectTransform []数组的每个rectTransform内?

时间:2015-12-10 23:50:33

标签: c# unity3d unity5

我一直在尝试使用这个功能

RectTransformUtility.RectangleContainsScreenPoint()

与foreach循环相关,但我没有得到结果..

这是我的代码:

if (Input.touchCount > 0)
    {
        foreach (RectTransform rectt in content.GetComponentsInChildren<RectTransform>())
        {

            if (RectTransformUtility.RectangleContainsScreenPoint(rectt, Input.GetTouch(0).position, cam))
            {
                switch (Input.GetTouch(0).phase)
                {
                    case TouchPhase.Began:
                        Debug.Log("BEGAN");
                        scroll.GetComponent<UnityEngine.UI.ScrollRect>().enabled = false;

                        break;
                    case TouchPhase.Ended:
                        Debug.Log("ENDED");
                        scroll.GetComponent<UnityEngine.UI.ScrollRect>().enabled = true;

                        break;


                }
            }


        }

    }

实际上滚动的东西就在那里,因为当触摸在数组的rectTransform内部时,我正在禁用scrollRect的滚动,或者至少这是我想做的事情。

该脚本附加到滚动视图的内容。

1 个答案:

答案 0 :(得分:1)

我假设您使用的RectTransform是屏幕空间UI元素?在这种情况下,问题是UI元素没有与相机相关联,因此传递给函数的相机参数应为null:

if (RectTransformUtility.RectangleContainsScreenPoint(rectt, Input.GetTouch(0).position, null))

问题是文档中真的不清楚。看这里: http://fogbugz.unity3d.com/default.asp?660005_vnn982nkbubqr4qp

另外,请记住,为了使Input.GetTouch能够正常工作,您必须拥有某种触摸输入设备,即它只能在真正的手机上或Unity Remote的编辑器中使用。