将Sprite x,y,width,height转换为view port rect

时间:2016-12-23 13:52:17

标签: c# unity3d

我有这个功能,我想将我的精灵x,y,宽度,高度转换为视口port rect,以便我可以将它设置为我的相机。

void SetImageRectToCameraRect() {
        float x = sideCameraMask.rectTransform.rect.x;
        float y = sideCameraMask.rectTransform.rect.y;
        float width = sideCameraMask.rectTransform.rect.width;
        float height = sideCameraMask.rectTransform.rect.height;
        Debug.Log(x);
        Debug.Log(y);
        Debug.Log(width);
        Debug.Log(height);
        Debug.Log(sideCamGUI.bounds.size.x);
        Debug.Log(sideCamGUI.bounds.size.y);
        Debug.Log(sideCamGUI.bounds.size);
        Vector3 v3 = GetComponent<Camera>().ScreenToViewportPoint(new Vector3(x,y,0));//x,y,0f
        Debug.Log("ScreenToViewportPoint::" + v3);

        camComponent.rect = new Rect(x, y, width, height);

    }

问题是如何将宽度和高度转换为相机视图端口宽度高度

1 个答案:

答案 0 :(得分:0)

我假设您正在使用2D并使用正交相机。透视相机使事情变得更加复杂。

要获得精灵占据的视口的百分比(分数),您可以将widthheight分别除以相机的宽度和高度。

float camHeight = camera.orthographicSize * 2;
float camWidth = camHeight * camera.aspect;

float heightFraction = height / camHeight;
float widthFraction = width / camWidth;

如果您正在使用MosesDetokenizer(我认为是这种情况),请直接使用widthFractionheightFraction。如果您使用的是Camera.rect,请分别将widthFractionheightFraction乘以Camera.pixelWidthCamera.pixelHeight

如果您想要相机的可见区域的宽度和高度,则必须执行边界交叉,这应该是无关紧要的。