Unity UI坐标的转换

/// <summary>
    /// 屏幕坐标转换成 UI 坐标
    /// </summary>
    /// <param name="targetParentRect"> 目标 UI 父物体的 RectTransform </param>
    /// <param name="mousePos"> 鼠标位置 </param>
    /// <param name="canvasCam"> 如果Canvas的渲染模式为: Screen Space - Overlay, Camera 设置为 null;
    /// Screen Space-Camera or World Space, Camera 设置为 Camera.main></param>
    /// <returns>UI 的局部坐标</returns>
    private Vector2 ScreenToUILocalPos(RectTransform targetParentRect, Vector2 mousePos, Camera canvasCam = null)
    {
        //UI 的局部坐标
        Vector2 uiLocalPos;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(targetParentRect, mousePos, canvasCam, out uiLocalPos);
        return uiLocalPos;
    }
使用方法:// targetRect 目标物体,也就是UI物体
targetRect.localPosition = ScreenToUILocalPos(targetRect.parent as RectTransform, Input.mousePosition);
/// <summary>
    /// 屏幕坐标转换成 UI 坐标
    /// </summary>
    /// <param name="targetRect"> 目标 UI 物体的 RectTransform </param>
    /// <param name="mousePos"> 鼠标位置 </param>
    /// <param name="canvasCam"> 如果Canvas的渲染模式为: Screen Space - Overlay, Camera 设置为 null;
    /// Screen Space-Camera or World Space, Camera 设置为 Camera.main></param>
    /// <returns> UI 的坐标 </returns>
    private Vector3 ScreenToUIWorldPos(RectTransform targetRect, Vector2 mousePos, Camera canvasCam = null)
    {
        //UI 的局部坐标
        Vector3 worldPos;
        RectTransformUtility.ScreenPointToWorldPointInRectangle(targetRect, mousePos, canvasCam, out worldPos);
        return worldPos;
    }
使用方法:targetRect 目标物体,也就是UI物体
targetRect.position = ScreenToUIWorldPos(targetRect, Input.mousePosition);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容