其他分享
首页 > 其他分享> > FGUI在Container容器中的物体使用LocalToGlobal,获取屏幕坐标

FGUI在Container容器中的物体使用LocalToGlobal,获取屏幕坐标

作者:互联网

做新手引导的过程中发现,在滚动容器中的物体不能通过自身GObject.LocalToGlobal(Vector2.zero),来获取屏幕坐标,如果容器发生移动,物体的XY是不变的,导致这种方法获取的坐标始终是不变的。

目前的解决方案是遍历父物体,手动加上scrollPane的偏移量:

public static Vector2 GetGlobalPosInContainer(GObject obj, bool isCenter)
{
    Vector2 lastPos = isCenter ? obj.size / 2 : Vector2.zero;

    if (obj.parent != null)
    {
        while (obj.parent != GRoot.inst)
        {
            lastPos += obj.xy;

            if (obj.inContainer && obj.parent.scrollPane != null)
            {
                lastPos.x -= obj.parent.scrollPane.posX;
                lastPos.y -= obj.parent.scrollPane.posY;
            }

            if (obj.pivotAsAnchor)
            {
                lastPos.x -= obj.width * obj.pivotX;
                lastPos.y -= obj.height * obj.pivotY;
            }

            obj = obj.parent;
        }
        lastPos += obj.xy;
    }
    else
    {
        lastPos += obj.LocalToGlobal(Vector2.zero);
        obj = obj.parent;
    }
    return lastPos;
}

参考:
FairyGUI坐标转换辅助类
本地坐标转世界坐标坑逼之处

标签:obj,parent,lastPos,Vector2,FGUI,坐标,LocalToGlobal,scrollPane,Container
来源: https://blog.csdn.net/qq_18220673/article/details/115110393