• 产品手册
  • 编辑器功能手册
  • UI编辑器
  • 定位与适配说明

定位与适配说明

什么情况需要使用适配相关设置

简单来说,同一套 UI 需要在各种不同分辨率的屏幕上都能达到理想的显示效果时,都需要对 UI 进行定位和适配。比如常见的的问题:地图运行时,UI 显示是歪的、图片被拉伸了、按钮位置和预想的不一致等。

这时候,我们需要结合屏幕适配方案和控件定位达成预期的效果。

屏幕适配方案

因为设计分辨率与设备分辨率的不同,所以显示在不同设备上的时候,都是要乘以一个缩放系数,来保证 UI 的元素能够充满屏幕。

实际开发中,我们往往既不愿产生形变,也不希望有不受控的裁切。我们希望坐标系的原点能保证处于屏幕左下,因此我们需要计算出一个和物理分辨率等比例的一个设计分辨率,可以叫做 FitSize,用他来初始化 UI,这样才可以将坐标范围扩展到整个屏幕区域,这就是屏幕适配方案。

选择屏幕适配方案

1.画布适配模式

目前编辑器提供两种模式用于屏幕适配

选中 panel,在 panel 属性中,选择画布适配模式

PAA1

① 拉伸模式:根据实际的屏幕分辨率分别计算进行自适应缩放,结果:会造成宽高不同比例,变形拉伸效果。

② 适配模式:根据适配算法计算实际运行时的控件的拉伸比例,结果:控件不会产生形变,纵向能够完美适配,但是横向可能有部分区域不显示 UI

其中画布适配模式在本次版本更新中进行了优化迭代,因为适配模式分为新旧两版。

2.新旧版适配开关

主界面编辑-通用设置-UI-启用新版适配,旧地图默认关闭开关,使用旧版适配算法。新地图默认开启开关,使用新版适配算法。

3.新版适配原理

新版本适配在 cocos 屏幕适配 cc.RESOLUTIONPOLICY_EXACT_FIT(以下用 REF 指代)方案的基础上进行。

假设设计分辨率为(dw, dh),实际屏幕分辨率即窗口大小为(rw, rh),横向缩放系数 sx,纵向缩放系数 sy

那么在 REF 方案下横向缩放 sx=rw/dw,纵向缩放 sy=rh/dh。

① 旧版适配算法

旧版是根据当前窗口高度确定画布一级子节点的缩放

sy=sx=rh/1080.0,当窗口高度 rh=540.0 时,不管窗口宽度 rw 如何变化,所有控件横向纵向缩放系数=540.0/1080.0=0.5

② 新版适配算法

控件不能变形,必然要实现 sx=sy,同时保持与旧版的缩放对齐,即 sy=rh/dh=rh/1080.0,可知 dh=1080.0,rh/dh=rh/1080.0=rw/dw

推出 dw=1080.0/rhrw,设计分辨率(dw, dh)=(1080.0/rhrw, 1080.0)

因此,游戏内新版画布大小(ECA 输出值)为(1080.0/rh*rw, 1080.0),所有子控件的尺寸坐标都基于此。

例如一个子控件的坐标百分比为 xp yp,那么它的坐标绝对值为(1080.0/rhrwxp, 1080.0yp),开启适配 0 0 0 0 的情况下,尺寸也会变为(1080.0/rhrw, 1080.0)

定位和适配

编辑器内控件定位的方式有以下三种:绝对定位(需要大量设置和获取控件位置,不推荐使用)、百分比定位、相对父级位置

1.百分比坐标和像素坐标

UI 编辑器供了坐标变成百分比表示的方式,表示该控件相对父控件在横向和纵向的百分比位置。使用百分比坐标也能解决不少常见的定位问题。

由于历史原因,6.27 版本前的控件像素坐标本质上是百分比坐标;6.27 新增了百分比坐标选项,旧地图升级会默认为百分比坐标不影响旧地图效果,新的像素坐标则是绝对坐标。

PAA2

·百分比坐标是可以在横纵两个方向上各自独立设置

·坐标位置属性是指相对于父亲节点左下角的位置,百分比位置是相对于父亲尺寸的百分比,所以一个控件居中的拼法是,锚点 0.5 0.5 坐标 50% 50%

·使用百分比位置后,父控件位置发生改变时,可以按照对应的比例进行自动调整,子控件相对父控件的百分比位置始终不变。子控件尺寸保持不变。

如图父控件黑白图片尺寸为 200200,子控件红色按钮尺寸 5050,默认锚点(0.5,0.5),设置按钮相对父级位置 25%,25%

PAA3

当父控件尺寸发生变化时,效果如下:

尺寸变化 1:父控件变为 300*200

PAA4

尺寸变化 2:父控件尺寸变为 200*100

PAA5

2、相对父级位置

由固定的“钉子“和数字组成,点击启用“钉子”+数字表示边距。

PAA6

有以下两种表现:

① 单侧固定

启用一侧或者相邻侧的钉子固定,当父节点尺寸发生变化时,控件保持距离父节点对应侧的边距不变,四边效果同样

PAA7

PAA8

② 定边距拉伸

当父节点尺寸变化时其表现为:控件尺寸变化,保持其左右/上下/上下左右距离父节点对应边距不变,控件跟随父节点的宽高变化进行对应拉伸

PAA9

PAA10

PAA11