gohud

3つの層

← テーマ

プリセットは3つをまとめて束ねたものだ。空のままにした項目はデフォルトに落ちる。

決めるもの変え方
Theme 色、サイズ、文字の大きさ、そしてエンジンが描くものすべての形 — ボタンのパネル、入力欄、タブ、トグルの絵 .tres を書くか、tools/make_theme.py で生成する
GoSkin コードが描くものすべての形 — スティック、クイックスロットの面、コーチマークのリング、チップ、スケルトン、区切り線、セクション見出し 継承して、気にするメソッドだけを上書きする
GoIconSet 名前で引くアイコン — デフォルトの84枚、あるいはその上に重ねる中世セットの彫刻風16枚。テクスチャパックでもアイコンフォントでもよく、呼び出すコードはどちらでも同じだ セットを丸ごと渡すか、いくつかの名前だけ差し替える
Theme だけでは足りない理由。 StyleBoxFlat が持つ角は丸だけだ — 半径を 0 にすれば直角になるが、その中間は存在しない。斜めに切り落とした角、1辺だけ太い縁、外へにじむ発光。 エンジンはそのどれも描かない。しかもスティックとコーチマークは _draw() の中で描かれており、 テーマはそこへ届かない。

選ぶ

GoUi.use_preset(GoThemePresets.SCIFI_DARK)

この1行でテーマ・スキン・アイコンが入れ替わる。エディタからは プロジェクト設定 → Gohud → Theme → Preset、設定リソースからは GoConfig.preset で指定する。

1つだけ自分のものを使う

GoUi.use_preset(GoThemePresets.SCIFI_DARK)
GoUi.config.icons = my_icons     # アイコンだけ自前、ほかはプリセットのまま

themeskinicons を明示的に設定すると、プリセットより優先される

組み込みの6プリセット

プリセットパネルスキン · アイコン
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 としてインポートされること。実物のクイックスロットがスキンを使うこと。 複製したスキンのダイヤルを変えると、プリセットに触れずにスロットへ届くこと。そして戻したときに、 デフォルトと SF のジオメトリが復元されること。

自分だけの王国を作る

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.fontstitle・subtitle・caption・body・button の役割を、アドオン内の res:// フォントファイルへ割り当てる。書かなかった役割は継承したフォントのままだ。
skin.dialsクイックスロットの角丸、リベットの表示、質感、ハイライト。ダイヤルの全一覧は下の表にある。