U3D 如何计算一个UI四个角的绝对坐标
//方式一,使用API获取
var rtrans = gameObject.GetComponent<RectTransform>();
Vector3[] worldcorners = new Vector3[4];
rtrans.GetWorldCorners(worldcorners);
//方式二,手动计算
var cam = GameObject.Find("Camera").GetComponent<Camera>();
var cam_h = 2 * cam.orthographicSize;
var cam_w = cam_h * Screen.width / Screen.height;
var canvasObj = GameObject.Find("Canvas");
var canvas = canvasObj.GetComponent<Canvas>();
var canvasScaler = canvasObj.GetComponent<CanvasScaler>();
float screen_w = Screen.width;
float screen_h = Screen.height;
var pos = transform.position;
var fw = rtrans.rect.width;
var fh = rtrans.rect.height;
if (canvasScaler.uiScaleMode == CanvasScaler.ScaleMode.ScaleWithScreenSize)
{
screen_w = canvasScaler.referenceResolution.x;
screen_h = screen_w * Screen.height / Screen.width;
}
if (canvas.renderMode == RenderMode.ScreenSpaceCamera)
{
fw = rtrans.rect.width / screen_w * cam_w;
fh = rtrans.rect.height / screen_h * cam_h;
}
float[] wcs = new float[4];
var c1 = pos.x - fw / 2;
var c2 = pos.x + fw / 2;
var c3 = pos.y - fh / 2;
var c4 = pos.y + fh / 2;
//两种试计算得到的结果完全一样
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步