gohud

三层结构

← 主题

一套预设把三层打包在一起。留空的字段会回退到默认值。

决定什么怎么改
Theme 颜色、尺寸、文字缩放,以及引擎自己绘制的一切的形状 —— 按钮面板、输入框、标签页、开关贴图 手写一份 .tres,或用 tools/make_theme.py 生成
GoSkin 由代码绘制的一切的形状 —— 摇杆、快捷槽的面、引导标记的光圈、标签片、骨架屏、分隔线、分节标题 继承它,只重写你在意的那几个方法
GoIconSet 按名字取用的图标 —— 84 个默认图形,或者中世纪图标集覆盖其上的 16 个雕刻图形。可以是贴图包,也可以是图标字体;调用方的代码完全一样 提供一整套,或者只覆盖其中几个名字
为什么光有 Theme 还不够。 StyleBoxFlat 只有圆角这一种角 —— 把半径设成零得到的是直角,中间没有别的可能。斜切的角、单独一条加粗的边、外发光:引擎一个都画不出来。 而摇杆和引导标记是在 _draw() 里画的,主题根本够不着那里。

挑一套

GoUi.use_preset(GoThemePresets.SCIFI_DARK)

这一行会把主题、皮肤和图标一起换掉。在编辑器里可以用 项目设置 → Gohud → Theme → Preset;用设置资源的话就是 GoConfig.preset

保留其中一项由自己决定

GoUi.use_preset(GoThemePresets.SCIFI_DARK)
GoUi.config.icons = my_icons     # 图标用自己的,其余全部用预设的

显式设置 themeskinicons压过预设。

六套内置预设

预设面板皮肤 · 图标
default_dark · default_light圆角 StyleBoxFlat 面板,配分级的阴影层次;主按钮按下时会有升起和沉下的感觉GoSkin · 84 个默认图标
scifi_dark · scifi_light带霓虹边和辉光的切角 GoStyleBoxCut 面板;焦点标记用 GoStyleBoxBracketGoSkinSciFi —— 六边形摇杆 · 默认图标
medieval_dark · medieval_light锻造的 GoStyleBoxMedieval 边框 —— 铁与皮革,或羊皮纸 —— 菜单上带铆钉和角落纹饰GoSkinMedieval · 覆盖默认集的 16 个雕刻图标

中世纪:铁、皮革与羊皮纸

medieval_dark 把暗铁和皮革配上仿古金,medieval_light 则用羊皮纸和墨水。两者都使用 GoSkinMedieval、现有的控件,以及 16 个带雕刻细节的原创图标; 导航类图标回退到原本的图标集。

GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK)
# 或者:GoUi.use_preset(GoThemePresets.MEDIEVAL_LIGHT)

请在创建 UI 之前选好预设。显式设置的 GoConfig.themeskinicons 依然优先。打开 res://addons/gohud/examples/medieval/medieval.tscn 并按 F6,就能看到一套能用的 角色面板、行囊和任务日志。里面的按钮可以切换风格变体并打开物品详情。

中世纪铁质风格的角色、背包和任务界面
铁与皮革
中世纪羊皮纸风格的角色、背包和任务界面
羊皮纸与墨水

菜单边框带一颗铆钉和小小的角落纹饰;常驻显示的 HUD 则保持素净的边。 生命、魔法和耐力分别用红、蓝、橄榄绿填充。Cinzel 只用在标题和副标题上; 正文仍沿用宿主项目或默认的字体。随包字体的许可证放在 assets/fonts/cinzel/OFL.txt

雕刻图标集重画了 bagbookboxcoincrownflagheartkeymappotionshieldstarsworduser,另外新增了 scrollseal。 其余名字一律回退到默认集,所以 closesettings 在任何预设下都保持默认图形。 Cinzel 只覆盖拉丁字母;本地化后的标题请通过 shape.fonts 指定各自的字体。

测试套件对两个变体都检查了什么。 中世纪皮肤确实被选中;菜单和 HUD 面板是锻造边框,且纹饰只出现在菜单上; 标题使用 Cinzel 而正文保持继承来的字体;雕刻图标以 DPITexture 导入; 真实的快捷槽确实用上了该皮肤;改动一份皮肤副本的旋钮能传到快捷槽而不必碰预设; 切回去之后默认和科幻的几何形状能够恢复。

造一个自己的王国

python3 addons/gohud/tools/new_theme.py kingdom --from medieval_dark
# 编辑 themes/palettes/kingdom.json,然后:
python3 addons/gohud/tools/make_theme.py kingdom
godot --headless --path . --import
# 在 GDScript 里,创建控件之前:
GoUi.use_preset(&"kingdom")

JSON 主题可以继承别的 JSON 主题。省略的值沿用父主题的设置; 循环继承会被拒绝。生成出来的预设会保留父主题的图标集。

设置项效果
shape.material0:铁 · 1:皮革 · 2:羊皮纸。决定表面的纹路。
shape.grain_alpha纹理不透明度。设为 0 得到干净的表面。
shape.ornament_scale · shape.bevel_strength菜单角落纹饰的大小,以及斜面高光的强度。
shape.fonts把 title、subtitle、caption、body 和 button 这几个角色映射到插件内的 res:// 字体文件。省略的角色保持继承来的字体。
skin.dials快捷槽圆角、铆钉是否显示、纹理和高光。下面的完整表格列出了每一个旋钮。