当目标平台包括多种分辨率和宽高比的设备时:
WebGL 屏幕适配
Unity打出的WebGL包,让其打开后的显示区域比例与标准比例一致
不同平台适合的模版使用
- 机核 / 自己的服务:PWA
- 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之间的比例。具体来说:
x
和y
定义了视口的起始位置(左下角)在屏幕坐标系中的比例。width
和height
定义了视口的宽度和高度相对于屏幕的比例。
例如,如果你将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);
}
}
}
渲染结果:
- 在 1080x1080 的设备上
- 在 1080x1920 的设备上
拓展
多分辨率适配
Dynamic Resolution Scaling: 在质量设置中启用动态分辨率,Unity可以根据硬件性能自动调整渲染分辨率,以保持流畅的帧率。
使用自定义脚本
在某些情况下,可能需要编写自定义脚本来处理特定的适配逻辑,比如基于屏幕尺寸动态调整游戏世界的大小、UI元素的布局或特定图形元素的位置。
图像和纹理适配
确保纹理导入设置中的“Max Size”合适,避免在低分辨率设备上占用过多内存。同时,使用九宫格(Sprite 9-Slicing)技术可以让UI元素在拉伸时边缘保持清晰。
结合以上策略,你可以有效地在Unity项目中实现屏幕适配,确保游戏在各种设备上都能提供良好的用户体验。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。