Unity RectTransform·屏幕坐标转换

RectTransform转屏幕坐标

分两种情况

Canvas渲染模式为Overlay时,使用此方式

cs 复制代码
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时,使用此方式

cs 复制代码
/// <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);
}

屏幕坐标转RectTransfom局部坐标

针对锚点变化暂未测试

cs 复制代码
/// <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;
}
相关推荐
dhxhsgrx1 小时前
PYTHON训练营DAY25
java·开发语言·python
不知几秋2 小时前
数字取证-内存取证(volatility)
java·linux·前端
敲代码的 蜡笔小新3 小时前
【行为型之中介者模式】游戏开发实战——Unity复杂系统协调与通信架构的核心秘诀
unity·设计模式·c#·中介者模式
chxii5 小时前
5java集合框架
java·开发语言
敲代码的 蜡笔小新6 小时前
【行为型之解释器模式】游戏开发实战——Unity动态公式解析与脚本系统的架构奥秘
unity·设计模式·游戏引擎·解释器模式
yychen_java6 小时前
R-tree详解
java·算法·r-tree
JANYI20186 小时前
嵌入式设计模式基础--C语言的继承封装与多态
java·c语言·设计模式
xrkhy6 小时前
反射, 注解, 动态代理
java
Ten peaches7 小时前
Selenium-Java版(操作元素)
java·selenium·测试工具·html
lyw2056197 小时前
RabbitMQ,Kafka八股(自用笔记)
java