FairyGUI坐标转换辅助类

//fairy gui <<==>>世界坐标
public class CoordinateTranHelper
{
public static Vector3 WorldToFairyguiPos(Vector3 worldPos)
{
Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos);
screenPos.y = Screen.height - screenPos.y;
return GRoot.inst.GlobalToLocal(screenPos);
}

    public static Vector3 StagePosFairyGuiToWorld(Vector2 guiPos)
    {
        Vector2 screenPos = GRoot.inst.LocalToGlobal(guiPos);
        //原点位置转换
        screenPos.y = Screen.height - screenPos.y;
        //一般情况下,还需要提供距离摄像机视野正前方distance长度的参数作为screenPos.z(如果需要,将screenPos改为Vector3类型)
        Vector3 worldPos = StageCamera.main.ScreenToWorldPoint(screenPos);
        return worldPos;
    }
    
    /// <summary>
    /// 由子物体到父物体
    /// </summary>
    /// <param name="obj">子物体</param>
    /// <returns></returns>
    public static Vector3 FGUIGetGlobalPosByChildObj(GObject obj, bool isCenter = true)
    {
        Vector2 lastPos = isCenter ? obj.size / 2 : Vector2.zero;

        if (obj.parent != null)
        {
            while (obj.parent != GRoot.inst)
            {
                lastPos += obj.xy;
                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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34191439/article/details/100523675