Unity2D游戏的场景镜头适配

1,414 阅读2分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

作为一名优秀的开发者,对于技术的探求应该是永无止步的,如何让自己更进步,那就只有不停的学习,不停的充电.而这些都都是说起来容易做起来难,坚持才是难的地方 --蛙哈哈

2D游戏的场景是大小是固定, 不同的设备屏幕是不一样的,如果不处理镜头的适配问题,就会出现穿帮的问题.

比如:

image-20211209223249371.png

(9:16)

image-20211209224508693.png

(3:4)

在屏幕分辨率(9:16)下调整正确,在(3:4)下就穿帮了,所以我们需要一个适配工具来适配镜头,用于在任何分辨率下都表现正常.

先解释几个概念

  1. 相机

    1. 透视相机

      是模拟人眼的相机,看东西近大远小

    2. 正交相机

      无论距离远近,对象大小不变

      28b3bff02e76fe400f1df5d8f2fe0e98_r.jpg

      a 为透视相机 b为正交相机 由于2D游戏用的都是正交相机,所以后面都主要介绍正交相机

  2. 正交相机的size

    在代码中的属性为:orthographicSize

    在Inspector中为:size

    unity文档中的介绍:

    orthographicSize 为垂直视体大小的一半。视体的水平大小取决于宽高比。

    所以我们就需要在不同分辨率下,调整此值来达到适配的目的.

  3. 镜头和屏幕的适配

    先说一些基础概念:

    1. 游戏的设计分辨率为: 1080*1920
    2. 屏幕宽高比: Aspect Ratio
    3. 像素单位比: Assets Pixels Pre Unit 比如设置为200 则200个像素为一个单位, 目前游戏设计为200
    4. 屏幕高度等于高度的实际分辨率/像素单位比 1920 / 200 = 9.6
    5. 设计分辨率下的 camera的 size 为: 9.6 / 2 = 4.8
    6. 根据高度求宽度: 摄像机宽度 = 摄像机高度 * Aspect Ratio
    7. 根据宽度求高度: 摄像机高度 = 摄像机宽度 / Aspect Ratio

    因为此项目为竖屏游戏,所以需要基于宽来适配,也就是宽不变,高度随设备的大小改变而改变.

    代码实现:

    //游戏的设计分辨率为: 1080*1920
    private float _referenceCameraHeight = 9.6f; //设计分别率的高, 是可以算出来的,所以就提前算好,写进去
    private float _referenceCameraWidth = 5.4f; //设计分别率的宽, 是可以算出来的,所以就提前算好,写进去
    private float _referenceCameraSize = 4.8f;//设计分别率的size, 是可以算出来的,所以就提前算好,写进去
    private float _aspectRatio;
    
    _camera = this.GetComponent<Camera>();
    _aspectRatio = (float)Screen.width / Screen.height;
    //宽不变,所以基于设计的相机宽度 和屏幕的宽高比 算出 屏幕的高
    //摄像机高度 = 摄像机宽度 / Aspect Ratio = 摄像机宽度 * 16/9=6.4*16/9=11.38;
    _currentCameraHeight = 5.4f * Screen.height / Screen.width; 
    float orthographicSize = _currentCameraHeight / 2;
    _camera.orthographicSize = orthographicSize;
    

    image-20211210100643693.png

适配之后的3:4效果就正常了!!!!