using UnityEngine;
using UnityEngine.UI;
public static class UGUIUtility
{
public static Vector2 WorldToScreenPoint(Camera worldCam, CanvasScaler scaler, Vector3 worldPoint)
{
if (worldCam == null)
return new Vector2(worldPoint.x, worldPoint.y);
Vector2 screenPoint = (Vector2) worldCam.WorldToScreenPoint(worldPoint);
if (scaler != null)
{
screenPoint.x /= (Screen.width / scaler.referenceResolution.x);
screenPoint.y /= (Screen.height / scaler.referenceResolution.y);
}
return screenPoint;
}
public static Vector2 WorldToScreenPoint(Camera worldCam, Camera uiCam, CanvasScaler scaler, Vector3 worldPoint)
{
if (uiCam == null)
return WorldToScreenPoint(worldCam, scaler, worldPoint);
if (worldCam == null)
return new Vector2(worldPoint.x, worldPoint.y);
Vector2 viewportPoint = (Vector2) worldCam.WorldToViewportPoint(worldPoint);
viewportPoint.x -= 0.5f;
viewportPoint.y -= 0.5f;
Vector3 screenPoint = new Vector3(uiCam.pixelWidth * viewportPoint.x, uiCam.pixelHeight * viewportPoint.y, 0);
if (scaler != null)
{
screenPoint.x /= (Screen.width / scaler.referenceResolution.x);
screenPoint.y /= (Screen.height / scaler.referenceResolution.y);
}
return screenPoint;
}
public static bool WorldToScreenPoint(Camera worldCam, CanvasScaler scaler, Vector3 worldPoint, out Vector2 screenPoint)
{
if (worldCam == null)
{
screenPoint = Vector2.zero;
return false;
}
Vector3 pos = worldCam.WorldToScreenPoint(worldPoint);
if (pos.z < 0)
{
screenPoint = Vector2.zero;
return false;
}
screenPoint = (Vector2) pos;
if (scaler != null)
{
screenPoint.x /= (Screen.width / scaler.referenceResolution.x);
screenPoint.y /= (Screen.height / scaler.referenceResolution.y);
}
return true;
}
public static bool WorldToScreenPoint(Camera worldCam, Camera uiCam, CanvasScaler scaler, Vector3 worldPoint, out Vector2 screenPoint)
{
if (worldCam == null || uiCam == null)
{
screenPoint = Vector2.zero;
return false;
}
Vector3 viewportPoint = worldCam.WorldToViewportPoint(worldPoint);
if (viewportPoint.z < 0)
{
screenPoint = Vector2.zero;
return false;
}
viewportPoint.x -= 0.5f;
viewportPoint.y -= 0.5f;
screenPoint = new Vector2(uiCam.pixelWidth * viewportPoint.x, uiCam.pixelHeight * viewportPoint.y);
if (scaler != null)
{
screenPoint.x /= (Screen.width / scaler.referenceResolution.x);
screenPoint.y /= (Screen.height / scaler.referenceResolution.y);
}
return true;
}
}