首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取UnityEngine.UI.Images在screenSpace中的位置并计算标准化偏移量(在覆盖画布中)

获取UnityEngine.UI.Images在screenSpace中的位置并计算标准化偏移量(在覆盖画布中)
EN

Stack Overflow用户
提问于 2018-07-11 21:33:22
回答 1查看 3.7K关注 0票数 15

当前的问题:

简化

给定一个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扩展的?

很难想象如何才能做到这一点。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-02 10:13:26

我猜你没有任何比例或旋转在图像父母和位置Y是0。

首先,您可以使用rectTransform.GetWorldCorners()获取图像左上角的位置。

代码语言:javascript
复制
    //Upper left corner
    Vector3[] v = new Vector3[4];
    image.rectTransform.GetWorldCorners(v);
    var recPos = v[1];

然后,您必须将规范化偏移量转换为世界空间偏移量,以图像大小与正向偏移量之比计算,并添加左上角的位置:

代码语言:javascript
复制
    var recWidth = image.rectTransform.sizeDelta.x;
    var imgWidth = image.sprite.texture.width;
    var realOffsetX = offsetX * (recWidth / imgWidth);
    var realPosX = recPos.x + realOffsetX;

(这是Y坐标的相同公式,但必须用比率realOffsetY减去,因为偏移量是从左上角计算的)

以下是完整的方法:

代码语言:javascript
复制
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空间显示空间,只需使用照相机方法:

代码语言:javascript
复制
camera.WorldToScreenPoint(positionOffset);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51294475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档