gohud

皮肤 —— Theme 够不着的地方

← 主题

方法决定什么
surface_box · floating_box · overlay_box卡片和面板的表面、浮动层,以及压在游戏画面或地图上的胶囊标签
chip_box · chip_ink标签片的面板,以及压在它上面仍然读得清的文字颜色
slot_box · slot_ink快捷槽的面和上面的文字
disc_box头像或徽标背后的圆形
alert_box · skeleton_box · segment_box内联提醒、占位骨架、分段控件
coach_ring_box新手引导圈在目标周围的那个标记
draw_joystick · draw_coach_pointer直接绘制出来的东西 —— 摇杆和它的指针
divider_color · divider_thickness · section_box分隔线和分节标题
badge_box快捷槽上的角标 —— 数量和剩余时间
progress_fill_box · notice_box · tint_notice状态条填充(当填充色在底槽上达不到 3:1 时加描边)和消息条
class_name MySkin extends GoSkin

func draw_joystick(canvas: CanvasItem, center: Vector2, knob: Vector2,
        radius: float, knob_radius: float, ink: Color, base: Color, active: bool) -> void:
    # 控件已经把位置算好了 —— 这里只负责画
    canvas.draw_circle(center, radius, Color(base, 0.4))
    canvas.draw_circle(knob, knob_radius, ink)

StyleBoxFlat 画不出来的形状

它画出什么
GoStyleBoxCut斜切的角、一条加粗的强调边、外发光
GoStyleBoxBracket只画四角的标记,不把内容围起来
GoStyleBoxMedieval锻造边框 —— 铆钉、角落雕花、斜面高光,以及铁、皮革或羊皮纸的纹理

三者都能像别的 StyleBox 一样序列化进 Theme 资源 —— 正是这一点让主题能够改变形状。

内边距要通过 content_margin_* 给。 在 GDScript 里继承 StyleBox 意味着 _get_style_margin() 永远不会被调用(在 Godot 4.7 上实测)。请把内置字段填上, 否则内容会紧贴边框。