hadxyz 发表于 2016-7-22 21:32

使用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的逻辑。

质. 发表于 2017-2-18 15:24

很不错

似冷非寒ヽ冰 发表于 2017-2-18 15:30

楼主是超人

nicepainkiller 发表于 2017-2-18 14:51

好帖就是要顶

质. 发表于 2017-2-18 15:02

很好哦

EIBEN 发表于 2017-2-18 15:02

不错不错

波波 发表于 2017-4-10 12:56

很不错

天道无亲 发表于 2017-4-10 13:20

楼主是超人

khosh_shans 发表于 2017-4-10 12:28

顶顶多好

xiaohei 发表于 2017-4-10 12:40

很好哦
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 使用CanvasScaler后,ui位置如何的转换