//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;
}
}