1

当目标平台包括多种分辨率和宽高比的设备时:

WebGL 屏幕适配

Unity打出的WebGL包,让其打开后的显示区域比例与标准比例一致

不同平台适合的模版使用

处理

  1. 机核 / 自己的服务:PWA
  2. itch:PWA + 开启 FullScreen Button

重点项

1. 使用CanvasScaler组件

针对 UGUI 中的 UI元素,用 CanvasScaler 组件。
有几种适配模式可选:

Scale With Screen Size: 允许UI根据预设的参考分辨率进行缩放。你需要设定一个参考分辨率以及缩放模式(如:Constant Pixel Size, Scale With Screen Size, Constant Physical Size)来控制UI元素如何响应屏幕尺寸变化。

Reference Resolution: 设定一个基准分辨率,Unity会根据当前屏幕的实际分辨率与参考分辨率的比例自动调整UI元素的大小。

Match Width Or Height: 在此模式下,你可以选择匹配屏幕的宽度或高度,保证UI的一致性,尤其适合确保某些UI元素始终保持可见或保持特定比例。

2. 使用RectTransform

UI元素的RectTransform允许你通过锚点和偏移来灵活定位和调整元素大小。正确设置锚点是实现自适应布局的关键。

Anchors(锚点): 调整锚点可以让UI元素在屏幕的相对位置保持一致,无论屏幕尺寸如何变化。
Pivot(中心点): 改变UI元素的旋转或缩放中心。

3. 相机适配

固定宽高比适配。
对于游戏场景和相机,可以采用固定宽高比适配策略,保持游戏内容的视觉比例一致。这通常涉及到调整相机的 Viewport Rect 及 aspect(需通过脚本) 来维持特定的宽高比。

Viewport Rect(视口矩形)
Viewport Rect 属性决定了相机视图在最终渲染画面中的位置和大小。它是一个Rect类型的数据结构,由x, y, width, height四个值组成,这些值都是0到1之间的比例。具体来说:

  • xy 定义了视口的起始位置(左下角)在屏幕坐标系中的比例。
  • widthheight 定义了视口的宽度和高度相对于屏幕的比例。

例如,如果你将Viewport Rect设置为(0, 0, 0.5, 0.5),那么相机渲染的内容将会占据屏幕左下角四分之一的区域。调整这些值可以实现分屏显示、画中画效果等。

Camera Aspect Ratio(相机宽高比)
Aspect Ratio 指的是相机视图的宽度与高度的比例。这个属性对于保持图形的自然外观非常重要,确保图像不会被拉伸或压缩。Unity中的相机默认会尝试匹配其渲染的Game窗口或目标渲染纹理的宽高比。手动设置Aspect Ratio可以强制相机使用特定的宽高比进行渲染,这对于确保不同分辨率的屏幕上内容的一致性特别有用。

例如,如果设置Aspect Ratio为16:9(即大约1.7778),那么无论最终显示的屏幕实际宽高比如何,相机视图都将按照16:9的比例进行渲染,可能会导致渲染内容两侧有黑边或进行裁剪以适应实际屏幕。

这两个属性结合起来,可以让你灵活地控制游戏画面的布局和适应不同的显示设备。在多屏显示、分屏游戏、或需要精确控制渲染区域的应用场景中,调整Viewport Rect特别有效;而在需要维持特定视觉效果或兼容多种屏幕分辨率时,设置合适的Aspect Ratio就显得尤为重要。

例子

使用如下组件

public class InitCameraAsepect : MonoBehaviour
{
    public Vector2 aspect = new Vector2();

    // Start is called before the first frame update
    void Start()
    {
        var cam = GetComponent<Camera>();
        if (aspect.y != 0f)
        {
            cam.aspect = aspect.x / aspect.y;
            var rectH = Screen.width / cam.aspect / Screen.height;
            cam.rect = new Rect(0, (1 - rectH) / 2, 1, rectH);
        }
    }

}

image.png

渲染结果:

  1. 在 1080x1080 的设备上
    image.png
  2. 在 1080x1920 的设备上
    image.png

拓展

多分辨率适配

Dynamic Resolution Scaling: 在质量设置中启用动态分辨率,Unity可以根据硬件性能自动调整渲染分辨率,以保持流畅的帧率。

使用自定义脚本

在某些情况下,可能需要编写自定义脚本来处理特定的适配逻辑,比如基于屏幕尺寸动态调整游戏世界的大小、UI元素的布局或特定图形元素的位置。

图像和纹理适配

确保纹理导入设置中的“Max Size”合适,避免在低分辨率设备上占用过多内存。同时,使用九宫格(Sprite 9-Slicing)技术可以让UI元素在拉伸时边缘保持清晰。

结合以上策略,你可以有效地在Unity项目中实现屏幕适配,确保游戏在各种设备上都能提供良好的用户体验。


RDDcoding
151 声望17 粉丝

一心一行