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坐标转换辅助类
本地坐标转世界坐标坑逼之处

上一篇:【Unity】Ruby's Adventure 09 子弹发射 敌人移动的粒子效果 敌人被击中的粒子效果


下一篇:2020-UnityHelper v3Tv2