当前的问题:
简化
给定一个UnityEngine.Ui.Image,如何在400,300这样的ScreenSpace单元中找到标准化偏移量(从左上角0.4,0.3 )的X,Y位置
我想我需要找到左上角的ScreenSpace值,然后知道图像缩放的总大小,通过以像素表示的实际大小比来表示标准化的偏移量。
图1:

图2显示了将要使用的normalisedOffsets
图2:

因此,在precis中,我需要以ScreenSpace像素为单位,查找存储在图像上的Rect的topLeft像素的偏移量。
我认识到它可能是Camera.main.ViewportToWorldPoint()和一些对边界的引用的组合,可能是通过backgroundImage.sprite.pixelsPerUnit扩展的?
很难想象如何才能做到这一点。
谢谢
发布于 2018-08-02 10:13:26
我猜你没有任何比例或旋转在图像父母和位置Y是0。
首先,您可以使用rectTransform.GetWorldCorners()获取图像左上角的位置。
//Upper left corner
Vector3[] v = new Vector3[4];
image.rectTransform.GetWorldCorners(v);
var recPos = v[1];然后,您必须将规范化偏移量转换为世界空间偏移量,以图像大小与正向偏移量之比计算,并添加左上角的位置:
var recWidth = image.rectTransform.sizeDelta.x;
var imgWidth = image.sprite.texture.width;
var realOffsetX = offsetX * (recWidth / imgWidth);
var realPosX = recPos.x + realOffsetX;(这是Y坐标的相同公式,但必须用比率realOffsetY减去,因为偏移量是从左上角计算的)
以下是完整的方法:
private Vector3 GetPositionOffset(Image image, float offsetX, float offsetY)
{
//Upper left corner
Vector3[] v = new Vector3[4];
image.rectTransform.GetWorldCorners(v);
var recPos = v[1];
//X coordinate
var recWidth = image.rectTransform.sizeDelta.x;
var imgWidth = image.sprite.texture.width;
var realOffsetX = offsetX * (recWidth / imgWidth);
var realPosX = recPos.x + realOffsetX;
//Y coordinate
var recHeight = image.rectTransform.sizeDelta.y;
var imgHeight = image.sprite.texture.height;
var realOffsetY = offsetY * (recWidth / imgWidth);
var realPosY = recPos.y - realOffsetY;
//Position
return new Vector3(realPosX, realPosY, image.transform.position.z);
}如果您想让这个World空间显示空间,只需使用照相机方法:
camera.WorldToScreenPoint(positionOffset);https://stackoverflow.com/questions/51294475
复制相似问题