
可以看到我们是一个框选的功能 我的想法是 在 UI上面做一个Img 去进行一个框选 这个时候我是这么实现的
cs
public Rect GetSelectionAreaRect()
{
Vector2 selectionEndMousePosition = Input.mousePosition;
var lowerLeftCorner = new Vector2
(
Mathf.Min(selectionStartMousePosition.x, selectionEndMousePosition.x),
Mathf.Min(selectionStartMousePosition.y, selectionEndMousePosition.y)
);
var upperRightCorner = new Vector2
(
Mathf.Max(selectionStartMousePosition.x, selectionEndMousePosition.x),
Mathf.Max(selectionStartMousePosition.y, selectionEndMousePosition.y)
);
return new Rect(
lowerLeftCorner.x,
lowerLeftCorner.y,
upperRightCorner.x - lowerLeftCorner.x,
upperRightCorner.y - lowerLeftCorner.y
);
}
这部分代码是 计算当前的 鼠标的起始点 和 鼠标的终点 之后构建一个矩阵
矩阵的 是按照左下角进行算的 那么当前的UI锚点也是 左下

要不然你的位置是不对的
之后你要在
cs
var localScale = canvas.transform.localScale.x;//自适应UI
Rect selectionAreaRect = UnitSelectionManager.Instance.GetSelectionAreaRect();
selectionUI.anchoredPosition = new Vector2(selectionAreaRect.x, selectionAreaRect.y)/ localScale;
selectionUI.sizeDelta = new Vector2(selectionAreaRect.width, selectionAreaRect.height)/ localScale ;
计算一个canvas 的缩放 这个是因为你的是UI的 所发 如果是 1920 1080的缩放来计算的化 到 其他的大小你的canvas 就会进行变更我们要根据当前的 canvas所发进行计算到最终的点举一个例子

修改后

你应该就发现问题 所以你要根据当前的 矩阵 是根据屏幕大小来计算的 所以要 / 屏幕的缩放了