我有这个功能,我想将我的精灵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);
}
问题是如何将宽度和高度转换为相机视图端口宽度高度
答案 0 :(得分:0)
我假设您正在使用2D并使用正交相机。透视相机使事情变得更加复杂。
要获得精灵占据的视口的百分比(分数),您可以将width
和height
分别除以相机的宽度和高度。
float camHeight = camera.orthographicSize * 2;
float camWidth = camHeight * camera.aspect;
float heightFraction = height / camHeight;
float widthFraction = width / camWidth;
如果您正在使用MosesDetokenizer
(我认为是这种情况),请直接使用widthFraction
和heightFraction
。如果您使用的是Camera.rect
,请分别将widthFraction
和heightFraction
乘以Camera.pixelWidth
和Camera.pixelHeight
。
如果您想要相机的可见区域的宽度和高度,则必须执行边界交叉,这应该是无关紧要的。