支持

常见问题解答

关于构建体积、字体、字形图集与运行时性能的直接解答——提炼自真实开发者的提问。

构建体积与分发

UniText 会让我的构建体积膨胀吗?最终究竟有什么被打进构建?

构建大小取决于平台、架构、代码裁剪及压缩方式。字形图集在运行时生成。 字体资源携带自身数据,原始 .ttf 和 .otf 仅供编辑器引用。原生播放器读取磁盘缓存,WebGL 则嵌入数据。

我需要保留并发布 .ttf 文件吗?

字体资源携带自身数据,原始 .ttf 和 .otf 仅供编辑器引用。原生播放器读取磁盘缓存,WebGL 则嵌入数据。

我甚至需要把 .ttf 导入到我的项目里吗?

不需要。您可以通过 UniText 工具窗口,从磁盘上任意位置的 .ttf 构建一个 UniTextFont(文件对话框会直接读取字节)。把字体导入项目是可选的。

UniText 对一个空构建究竟增加了多少体积?

构建大小取决于平台、架构、代码裁剪及压缩方式。字形图集在运行时生成。

在 CJK 或大字体方面,UniText 与 TextMesh Pro 相比如何?

自动选择系统字体。桌面和移动端可按需使用自定义字体;WebGL 使用指定字体。 新字形需要光栅化和上传。已缓存字形会持续复用,直到失效或被移出缓存。

我可以从服务器或 CDN 动态加载字体吗?

可以——这属于开发者一侧,UniText 不会横加干涉。用您自己的代码(UnityWebRequest)下载字体字节,然后在运行时通过 CreateFontAsset(byte[]) 从中构建一个 UniTextFont。若要把字体裁剪到只保留您需要的字符(子集化),请使用 UniText 的构建期工具。包内没有内置的 CDN 自动加载器——这是刻意为之,属于项目的职责,而非引擎的职责。

字体与系统字体

UniText 能使用操作系统的系统字体吗?它在内存和启动上有多大开销?

自动选择系统字体。桌面和移动端可按需使用自定义字体;WebGL 使用指定字体。

WebGL 支持系统字体吗?

自动选择系统字体。桌面和移动端可按需使用自定义字体;WebGL 使用指定字体。

Font Memory Mapping

大型字体文件按需从磁盘读取,无需在托管内存中保留完整副本。未使用的字体保持压缩状态。 WebGL 和编辑器中的嵌入字体使用内存数据。基于文件的字体使用内存映射。

真正的像素字体

清晰像素、自动网格检测,以及对齐网格的效果和动画。矢量像素字体和纯位图字体共用样式系统。 字号为 Pixel Grid 的整数倍时像素精确对应。Snap To Pixel Grid 同时对齐效果与动画;关闭后允许亚像素移动。

字形图集 —— SDF Detail 与 Tile Size

“SDF Detail” 与 “Tile Size Offset” 究竟有什么作用?

字形存放在三种尺寸的图块中——64、128、256——尺寸由轮廓复杂度决定(段数多 → 128/256,轮廓简单 → 64)。 • SDF Detail(SDF 细节)是对复杂度估算值的乘数。调高它,一个本就不算简单的字形就更可能被提升到更大的图块。(真正简单的形状仍停留在 64——该乘数只影响阈值以上的字形。) • Tile Size Offset(图块尺寸偏移)是沿尺寸阶梯的硬性跳变(选定 64 + 偏移 1 → 128;范围 −2..+2)。

为了性能,这两者我该优先考虑哪一个?

单独看哪个都不必——两者都只决定最终的图块尺寸,而开销仅由该尺寸本身决定。两组解析到相同图块尺寸的组合,开销完全一样。目标是在仍能给出可接受质量的前提下,取最小的图块尺寸。

运行时性能

UniText 何时光栅化字形?它会每帧拷贝内存吗?

新字形需要光栅化和上传。已缓存字形会持续复用,直到失效或被移出缓存。

当大量新文本同时出现时,为什么会有短暂的卡顿?

新字形需要光栅化和上传。已缓存字形会持续复用,直到失效或被移出缓存。

我在 Profiler 里看不到 UniText 的 job——多线程真的在工作吗?

Core 在渲染前协调文本处理。工作线程和 Burst 处理大量任务,局部修改仅使相关处理阶段失效。

MonoBehaviour.Update() 会损害性能吗?需要一个统一的 UniTextManager 吗?

Core 在渲染前协调文本处理。工作线程和 Burst 处理大量任务,局部修改仅使相关处理阶段失效。

支持与讨论

Discord 是提问、寻求帮助和讨论的主要渠道。错误报告和功能建议请提交至公开的问题跟踪器。

支持与讨论: [email protected]