问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Unity RectTransform屏幕坐标转换详解

创作时间:
作者:
@小白创作中心

Unity RectTransform屏幕坐标转换详解

引用
CSDN
1.
https://blog.csdn.net/qq_35030499/article/details/136389143

在Unity开发中,RectTransform的屏幕坐标转换是一个常见的需求,特别是在处理UI布局和交互时。本文将详细介绍RectTransform转屏幕坐标和屏幕坐标转RectTransform局部坐标的两种情况,并提供相应的代码实现。

RectTransform转屏幕坐标

Canvas渲染模式为Overlay时

当Canvas的渲染模式为Overlay时,可以使用以下方法将RectTransform转换为屏幕坐标:

public Rect GetScreenCoordinatesOfCorners(RectTransform rt)
{
    var worldCorners = new Vector3[4];
    rt.GetWorldCorners(worldCorners);
    var result = new Rect(
                    worldCorners[0].x,
                    worldCorners[0].y,
                    worldCorners[2].x - worldCorners[0].x,
                    worldCorners[2].y - worldCorners[0].y);
    return result;
}

/// <summary>
/// RectTransform转屏幕坐标
/// </summary>
/// <param name="rt"></param>
/// <returns></returns>
public Vector2 RectTransformToScreenPoint(RectTransform rt)
{
    Rect screenRect = GetScreenCoordinatesOfCorners(rt);
    return new Vector2(screenRect.center.x, screenRect.center.y);
}

Canvas渲染模式为Camera时

当Canvas的渲染模式为Camera时,可以使用以下方法将RectTransform转换为屏幕坐标:

/// <summary>
/// RectTransform转屏幕坐标
/// </summary>
/// <param name="rt"></param>
/// <param name="uiCamera"></param>
/// <returns></returns>
public Vector2 GetScreenPoint(RectTransform rt,Camera uiCamera)
{
    return uiCamera.WorldToScreenPoint(rt.position);
}

屏幕坐标转RectTransform局部坐标

对于屏幕坐标转换为RectTransform局部坐标,可以使用以下方法:

/// <summary>
/// 屏幕坐标转局部坐标
/// </summary>
/// <param name="screenPoint"></param>
/// <param name="parent"></param>
/// <param name="UICamera"></param>
/// <returns></returns>
public Vector2 ScreenPointToRectTransform(Vector2 screenPoint,  RectTransform parent,Camera UICamera)
{
    Vector2 LocalPoint = Vector2.zero;
    RectTransformUtility.ScreenPointToLocalPointInRectangle(RT, screenPoint, UICamera, out LocalPoint);
    return LocalPoint;
}

需要注意的是,这种方法针对锚点变化暂未测试,使用时需谨慎。

通过以上方法,开发者可以轻松实现RectTransform与屏幕坐标之间的转换,从而更好地处理UI布局和交互问题。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号