自带的Screen.width
一般情况可以使用Screen.width来获取现在的屏幕宽度
UnityEngine.Screen.width
但是如果我们在开发的时候使用了Canvas Scaler来控制在各种分辨率保证UI的比例时使用Screen.width得到的宽度会和我们实际的宽度有差别。、
测试
设置Canvas Scaler和设置一个分辨率
从Scene窗口我们看到它的实际宽度只有1625并不是分辨率的2340 我们用简单的脚本控制一下方块的位置
void Start()
{
RectTransform rect = this.GetComponent<RectTransform>();
rect.anchoredPosition = new Vector2(-Screen.width,0);
Debug.Log(Screen.width);
}
出来的结果时2340并不是1625 得到正确的宽度,unity宽度的变化其实时按照屏幕的比值来计算的比如1334750是16:9的屏幕,而23401080是19.5:9的屏幕,所以如果是宽度分辨率位2340时它的宽度应该为1334*(19.5/16),下面是代码具体实现。
RectTransform rect = this.GetComponent<RectTransform>();
float Realwidth = (Screen.width / ((Screen.height / 750) * 1334)) * 1334;
rect.anchoredPosition = new Vector2(-Realwidth,0);
Debug.Log(Realwidth);
最后
这是前些天在适配不同分辨率手机的时候发现的一个有趣的小问题,当时也是找了很久发现并没有这方面的文章,所以今天就来记录一下
|