Unity关于屏幕适配留黑边的做法
程序员文章站
2022-05-25 08:49:31
...
终于下了决心开始写博客,想来想去还是先写个最近刚解决的问题。RT
我们项目使用的1280*720,也就是16:9的开发屏幕宽高比。因为开始做屏幕适配的时候有点晚了,然后游戏也不是那种很需要操作的,接着参考了下几个在ipad上的企鹅游戏,最后打算用留黑边来适配不同的屏幕。
一般来说对于4:3的屏幕都是上下黑边,2:1的屏幕都是左右黑边。如下图
大概的思路就是:按照开发的屏幕比例对比实际机型的屏幕比例来修改3DCamera和UICamera的ViewPortRect
1.首先获取两个比例,我这里是高宽比:
/// <summary>
/// 开发屏幕的宽
/// </summary>
public static float DevelopWidth = 1280f;
/// <summary>
/// 开发屏幕的长
/// </summary>
public static float DevelopHeigh = 720f;
/// <summary>
/// 开发高宽比
/// </summary>
public static float DevelopRate = DevelopHeigh /DevelopWidth;
/// <summary>
/// 设备自身的高
/// </summary>
public static int curScreenHeight = Screen.height;
/// <summary>
/// 设备自身的高
/// </summary>
public static int curScreenWidth = Screen.width;
/// <summary>
/// 当前屏幕高宽比
/// </summary>
public static float ScreenRate = (float)Screen.height / (float)Screen.width;
2.计算摄像机ViewPortRect中的实际宽高值:
/// <summary>
/// 世界摄像机rect高的比例
/// </summary>
public static float cameraRectHeightRate = DevelopHeigh / ((DevelopWidth / Screen.width) * Screen.height);
/// <summary>
/// 世界摄像机rect宽的比例
/// </summary>
public static float cameraRectWidthRate = DevelopWidth / ((DevelopHeigh / Screen.height) * Screen.width);
3.给每一个camera挂上脚本在Awake中调用FitCamera()
public void FitCamera(Camera camera)
{
///适配屏幕。实际屏幕比例<=开发比例的 上下黑 反之左右黑
if (DevelopRate <= ScreenRate)
{
camera.rect = new Rect(0, (1 - cameraRectHeightRate) / 2, 1, cameraRectHeightRate);
}
else
{
camera.rect = new Rect((1 - cameraRectWidthRate) / 2, 0, cameraRectWidthRate, 1);
}
}
4.给最外层的uicanvas挂上脚本调用FitCanvas
//适配uicanvas中的matchWidthOrHeight
public void FitCamera(Camera camera)
{
//适配屏幕。实际屏幕比例<=开发比例的,宽不变,高自适应,反之则不是
if (DevelopRate <= ScreenRate)
{
camera.rect = new Rect(0, (1 - cameraRectHeightRate) / 2, 1, cameraRectHeightRate);
}
else
{
camera.rect = new Rect((1 - cameraRectWidthRate) / 2, 0, cameraRectWidthRate, 1);
}
}
上一篇: python中如何使用mqtt的简易教程
下一篇: 一种Unity2D多分辨率屏幕适配方案
推荐阅读