屏幕适配是大家经常遇到的话题,对于2D游戏开发常常会发生美术提供的图片尺寸放置在精灵上时显示大小与美术提供的视图不一致问题?
在unity中图片pixels Per Unit 属性 与 图片在世界中的显示大小为 = 当前图片像素 / pixels Per Unit 值 (100 * 100 的图片pixels Per Unit 值为100在世界中的大小为 x = 1, y = 1)。
unity中2d相机的size值是默认为5,该值正常算法 = 当前game视窗设置的高 / 2(屏幕分为正负两部分)/ 100 (pixels Per Unit 值)例如:(1080 * 1920 的屏幕比例那么 size值就该设置为 1920 / 2 / 100 = 9.6) ,当值设置正确时美术给的图片与相机渲染出来的图片视觉感官就会一致大小。
屏幕适配代码:
public Camera _camera; //当前的2D相机
public CanvasScaler cs; //当前的UI相机
private float iconScale = 1; //当前2d相机size 与 实际相机size 的比例(当前项目已经做到一半相机size值为默认时用,如果对了为1)
private float _width = 1080; //当前设置的屏幕宽
private float _height = 2160; //屏幕高
private float currPrivate; //当前屏幕的比例
private float ratio; //设备的屏幕的比例
private void Awake()
{
#if WEIXINMINIGAME && !UNITY_EDITOR
ratio = WX.GetWindowInfo().screenWidth * 1f / WX.GetWindowInfo().screenHeight;
#else
ratio = Screen.width * 1f / Screen.height;
#endif
currPrivate = _width / _height;
//说明当前设备屏幕的宽度比预设宽带要大
if (ratio > currPrivate)
{
//UI相机的 UI Scale Mode 要为 Scale With Screen Size 模式 并且 设置好值
//cs.matchWidthOrHeight = 1; //说明UI适配应该以高适配
_camera.orthographicSize = iconScale * _height / 2 / 100; // 2d相机渲染大小
}
//说明当前设备屏幕的高度比预设高度要大
else
{
//cs.matchWidthOrHeight = 0; //UI相机应该以宽带适配
float num = _width / ratio; // 计算出当前的实际高度(实际高度 不等于 设备高度)实际高度 = 预设宽度 / 当前设备宽高比例
_camera.orthographicSize = num * iconScale / 2 / 100; // 用实际的高度去计算新的2D相机的size值
}
}