DPI 与缩放¶
MarkupUIWidget 使用 Slate 提供的局部尺寸和累计布局缩放,确定 HTML 页面的逻辑空间与物理绘制分辨率。
视口尺寸计算¶
Markup UI 控件从 Slate 几何中取得局部尺寸与累计布局缩放:
有效缩放 = Slate 累计布局缩放
物理尺寸 = round(控件局部尺寸 × 有效缩放)
累计布局缩放
累计布局缩放是 Slate 将控件的局部布局坐标换算到绝对坐标时使用的总缩放比例,包含从父级布局继承并组合后的缩放,不只是当前控件单独设置的比例。
例如,父级布局中有两级缩放分别为 1.5 和 0.8,且没有其他布局缩放时,总比例为 1.5 × 0.8 = 1.2。局部尺寸为 800 × 600 的控件,对应的页面物理分辨率为 960 × 720。
插件直接读取 Slate 几何中已计算好的总比例,无需使用者再逐级相乘。Render Transform 不属于这里的布局缩放。
插件将物理尺寸与该缩放值一起用于页面视口。UMG 的布局和 DPI 设置通过宿主几何影响页面,不需要在 HTML 中重复配置相同比例。
项目设置中的 DPI 曲线¶
通过标准游戏视口显示 UMG 界面时,Project Settings → User Interface → DPI Scaling 中的设置也会影响父级布局,进而影响 MarkupUIWidget:
- DPI Scale Rule:选择用于计算比例的规则。例如 Shortest Side 使用游戏视口宽高中较小的值,而不是 HTML 页面自身的宽高。
- DPI Curve:将规则选定的分辨率值映射为 UI 缩放比例。
- Application Scale:在规则计算结果上额外乘一个整体 UI 缩放系数。
例如,视口为 1920 × 1080,规则为 Shortest Side,则在曲线的 1080 处取值。若曲线值为 1.25、Application Scale 为 1.2,项目 UI 缩放结果为 1.5。这不是直接填写给插件的参数,最终比例仍以控件收到的 Slate 几何为准。
对覆盖相同物理区域的界面,UI 缩放增大时,可用逻辑尺寸会相应减小:例如物理区域为 1200 × 900、最终有效缩放为 1.5 时,逻辑布局区域约为 800 × 600。因此,调整曲线可能同时改变文字大小、换行及布局,而不只是改变清晰度。
DPI 曲线的适用范围
Markup UI 不单独读取曲线再叠加缩放,而是使用宿主已计算好的累计布局缩放。UE 游戏视口会处理平台 DPI 的重复应用问题,不能手动把系统缩放、曲线值和全部 UI 设置简单相乘。直接 Slate 窗口、离屏预览或资产编辑器不一定经过游戏视口的 DPI 曲线,应按各自宿主几何判断。
Scale to Fit 根据设计分辨率与视口比例计算,Custom 使用自定义规则,这两种方式不按上述普通曲线取样流程计算。设置说明见 UE DPI Scaling。
Render Transform 属于最终呈现变换,仍会保留,但不等同于上述累计布局缩放。通过 Render Transform 单独放大已绘制页面,可能引入纹理重采样;不能把它视为自动提高页面绘制分辨率的设置。
页面呈现与像素对齐¶
页面纹理已经按物理分辨率绘制,呈现时先按当前 Slate 布局缩放换算到局部尺寸,再保留显式渲染变换。不要再次应用帧中记录的 DPI。页面的像素对齐遵循 Slate 像素吸附设置;禁用吸附或额外缩放可能引入重采样。
视口改变而新帧尚未发布时,旧画面按当前坐标换算放置并裁剪,不强制拉伸到新控件尺寸。
检查显示结果¶
- 确认宿主控件的实际逻辑尺寸与有效缩放。
- 使用
100 × 100px色块及固定字号文字,比较不同缩放下的显示结果。 - 调整窗口尺寸,检查换行、滚动和裁剪。
- 排除 CSS 或父级额外缩放,检查页面最终位置与图片源分辨率。
相关说明:公共 DPI 与缩放、布局与尺寸。