用UGUI开发项目Canvas的适配一般都会选择Scale With Screen Size 模式
1.适配方案
竖屏游戏,一般会根据宽进行适配
横屏游戏,根据高适配
上面是我横屏游戏的适配属性。
2.各种分辨率
游戏开发时会有一个基础的设计分辨率,比如上面的游戏,设计分辨率即为 1080 * 1920
但在游戏实际运行时会遇到各种各样不同的分辨率
以12.9英寸iPad Pro为例,屏幕分辨率为2048*2732
当游戏以Ipad分辨率运行时,会发生适配,由于竖屏游戏按照宽来适配,因此发生适配后UI大小进行计算时,宽不会改变,仍旧为1080,iPad的高为宽的 2732/2048 = 1.334倍,因此换算后的高为
1080X1.334 = 1440。
iPad的最终换算分辨率为 1080 * 1440 (小数部分已略去)
屏幕坐标左下角为(0,0)点,右上角为(Screen.Width,Screen.Height)点。
3.从UI偏移量到屏幕坐标偏移量
当我点击A时,A会播放动画,使自身的本地坐标向上偏移200单位到B
我希望实际计算也以B点进行计算。
我利用Unity提供的IPointerDownHandler接口获取到的是屏幕坐标
public void OnPointerDown(PointerEventData eventData) {
this.eventData = eventData;
}
现在我点击了屏幕上的A点,获得是屏幕A点的屏幕坐标假定为(100,100);
那么如何计算出B点的屏幕坐标
UI物体的本地坐标向上偏移200单位,其实是在换算分辨率里向上移动了200单位,屏幕分辨率和换算分辨率是同比扩大的关系,因此在屏幕分辨率中就需要向上移动 2048/1080 * 200 = 379个单位。
B点的屏幕坐标即为(100,100 + 379)= (100,479)
最后我们会得到一个非常简单的公式
如果按照宽进行适配
public float GetOffset() {
//设计UI偏移量(Y值偏移)
float designOffsetY = 200;
//游戏设计分辨率的宽
float designWidth = 1080;
//计算出的屏幕坐标的Y值偏移量
float screenOffsetY = Screen.width / designWidth * designOffsetY;
return screenOffsetY;
}
按照高适配也是同理
public float GetOffset()
{
//设计UI偏移量(Y值偏移)
float designOffsetY = 200;
//游戏设计分辨率的高
float designHeight = 1920;
//计算出的屏幕坐标的Y值偏移量
float screenOffsetY = Screen.height / designHeight * designOffsetY;
return screenOffsetY;
}