使用CanvasScaler后,ui位置如何的转换
我想实现一个弹出菜单的效果,鼠标点击,则在点击处弹出。但,用了CanvasScaler后,直接使用鼠标点击的屏幕位置是不对的。屏幕位置必须要根据scale的规则转换,所以,我最先想用笨办法解决:
Vector3 pos = Input.mousePosition;
CanvasScaler scaler = ....;
if (scaler.uiScaleMode == CanvasScaler.ScaleMode.ScaleWithScreenSize)
{
// 直接的办法,但还是有误差,
pos.x *= scaler.referenceResolution.x /Screen.width ;
pos.y *= scaler.referenceResolution.y / Screen.height;
}
else if (scaler.uiScaleMode == CanvasScaler.ScaleMode.ConstantPixelSize)
{
// 这种模式下这么算是可以的
pos /= scaler.scaleFactor;
}
GetComponent<RectTransform>().anchorMax = Vector2.zero;
GetComponent<RectTransform>().anchorMin = Vector2.zero;
GetComponent<RectTransform>().anchoredPosition = pos;
有没有现成的函数 ,或办法可以解决这个问题,必须要去实现Scaler的逻辑。
很不错 楼主是超人 好帖就是要顶 很好哦 不错不错 很不错 楼主是超人 顶顶多好 很好哦