Unity 屏幕坐标鼠位置 Input.mousePosition 转为UI物体的坐标

方式一: 使用 RectTransformUtility.ScreenPointToLocalPointInRectangle

	/// 
    /// 屏幕坐标转换成 UI 坐标
    /// 
    ///  目标 UI 父物体的 RectTransform 
    ///  鼠标位置 
    ///  如果Canvas的渲染模式为: Screen Space - Overlay, Camera 设置为 null;
    /// Screen Space-Camera or World Space, Camera 设置为 Camera.main>
    /// UI 的局部坐标
    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);

方式二: 使用 RectTransformUtility.ScreenPointToWorldPointInRectangle

/// 
    /// 屏幕坐标转换成 UI 坐标
    /// 
    ///  目标 UI 物体的 RectTransform 
    ///  鼠标位置 
    ///  如果Canvas的渲染模式为: Screen Space - Overlay, Camera 设置为 null;
    /// Screen Space-Camera or World Space, Camera 设置为 Camera.main>
    ///  UI 的坐标 
    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);

你可能感兴趣的:(Unity,ui,unity,游戏引擎)