如何将点转换为局部坐标



当用户点击一个按钮时,如果点击一个透明像素,我希望点击被忽略,而它下面的按钮应该接收点击。

我可以在几分钟内在objective c中完成这种行为,然而,尝试在c#中的Unity中完成它已经被证明是不可能的,因为没有办法将一个点从屏幕转换为局部点。很明显,中间、左下角或左上角应该是原点(我不知道是哪一个,因为Unity会根据月亮的相位不断改变原点的位置)

我试着从ICanvasRaycastFilter中查看IsRaycastLocationValid在里面我使用了RectTransformUtility。ScreenPointToLocalPointInRectangle和RectTransformUtility。ScreenPointToWorldPointInRectangle,结果总是一样的。我给出的RectTransform是属于按钮的。

,

public bool IsRaycastLocationValid(Vector2 screenPosition, Camera raycastEventCamera) //uGUI callback
    {
        Vector2 localPoint;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, screenPosition, null, out localPoint);
        Vector2 pivot = rectTransform.pivot - new Vector2(0.5f, 0.5f);
        Vector2 pivotScaled = Vector2.Scale(rectTransform.rect.size, pivot);
        Vector2 realPoint = localPoint + pivotScaled;
        Debug.Log(screenPosition + " " + localPoint);
        return false;
    }

我从别人没有回答的尝试中得到的Unity 3d 4.6光线投射忽略精灵的alpha

我找到了这个链接http://forum.unity3d.com/threads/alpha-area-on-round-gui-button-return-click-event.13608/其中有人试图确定鼠标位置是否在图像边界内。一个明显的问题是,图像必须在(100,100)处有某个角。神奇的数字是不好的,试图找出如何得到这些坐标几乎是不可能的。

无论您将按钮放置在何处,RectTransform的以下属性总是相同的:

anchoredPosition    
anchoredPosition3D  
anchorMax   
anchorMin   
offsetMax   
offsetMin   
pivot   
rect    
sizeDelta
如你所见,

就是RectTransform拥有的所有属性。因此,不可能知道按钮在哪里,也不可能知道点击在按钮的坐标空间中的位置。

谁能告诉我怎么做我需要做什么?

应该可以做到:

bool isScreenPointInsideRectTransform( Vector2 screenPoint, RectTransform transform, Camera canvasCamera )
{
    Vector2 localPoint;
    RectTranformUtility.ScreenPointToLocalPointInRectangle( transform, screenPoint, canvasCamera, out localPoint );
    return transform.rect.Contains( localPoint );
}

这就是为什么你找不到按钮内部点的位置…但是你比较在按钮的 rect和按钮的localPosition本身的点的位置。

或者你可以将像素点转换为屏幕位置然后与鼠标位置进行比较

相关内容

  • 没有找到相关文章

最新更新