新登場:アーケード、コミック、Material 3、キッズ向けの見た目
デフォルト・SF・中世に新しい系統が4つ加わった — 組み込みの見た目は14種類になり、それぞれにダークとライトがある。 どのウィジェット・ポップアップ・HUD 部品も、コードを一切変えずにそのまま受け取る:プリセットを切り替えれば、画面全体がついてくる。

material_light
material_dark
kids_light
kids_dark
comic_light
comic_dark
arcade_light
arcade_darkMaterial 3 — アプリ画面向け
公式の M3 トークンと照らし合わせた Material 3 Expressive だ:48dp のタッチターゲットに 40dp の下地を収めた ピル型ボタン、28dp のダイアログとシート、塗りのカード、アウトラインの入力欄、Expressive のスライダー。アプリ部品 — ナビゲーションバー、アプリバー、FAB、検索バー、チップ、進捗、日付選択 — は M3 のコンポーネントトークンに従い、 タイトルには同梱の Roboto を使う。ショップ、設定、受信箱など、アプリらしく見せたいあらゆる画面に。
キッズ — おもちゃ箱
子どものために作った:キーも行もパネルも、太い縁取りと押すと沈むしっかりした段を持つゼリーキャンディで、 部品の種類ごとに自分のクレヨンの色をまとう。クイックスロットはキャンディのブロック、バッジはステッカー、 スティックは虹色だ。ウィンドウにはお日さま色のタイトルリボンと丸いキャンディの閉じるボタンが付き、押すとぷにっとつぶれる。 サイズとプロジェクトのフォントはまったく変わらない。
コミック — 太いインク
どの面もマンガのコマだ:太いインクの輪郭の中に表面の色を塗り、後ろにくっきりした影を落とし、 面を押すとその影が消える。設定1つですべての影をオン・オフし、さらに2つで輪郭の太さと影の大きさを決め、 呼び出し1つで同じことをウィジェット1つにだけ行える。ウィンドウには黄色のタイトルキャプションが付く。
アーケード — 塗られたキー
どのキーも塗られている — グラデーション、白い光沢、押すと沈む段を紺色のインクの輪郭に収め — ラベルはインクで縁取った白い文字だ:プレイは緑、ほかは青、削除は赤。ボードは厚く、淡い内側を 色の枠が囲む。ウィンドウには金色のタイトルバナーと丸い赤の閉じるキーが付く。
GoUi.use_preset(GoThemePresets.MATERIAL_LIGHT) # または MATERIAL_DARK
GoUi.use_preset(&"kids_light") # または &"kids_dark"
GoUi.use_preset(&"comic_light") # または &"comic_dark"
GoUi.use_preset(&"arcade_light") # または &"arcade_dark"
Material 3 の詳細 → · キッズの詳細 → · アーケードをウィジェットごとに ↓ · コミックをウィジェットごとに ↓ · 同じポップアップを14の見た目で →
アーケード:塗られたキーと厚いボード
いちばん新しい見た目は、どの画面もアーケード筐体のように仕立てる。どのキーも塗られている — 上が明るく下へいくほど
深くなるグラデーション、白い光沢のひと筋、押すと沈む段を、すべて紺色のインクの輪郭に収め — ラベルはインクで縁取った白い文字だ。
どのボードも厚い:自分の光沢を持つ色の枠が、淡い内側を囲む。
arcade_light は空色のページに白いボードを、arcade_dark は夜のページに紺色のボードを置く。
下の画像はすべて本物の gohud の画面だ — 同じコードで、違うのはプリセットの1行だけ。
GoUi.use_preset(&"arcade_light") # または &"arcade_dark"

arcade_light · ギャラリー
arcade_dark · ギャラリー
GoDialogs
GoSheet
GoCoachMark
GoDrawer
GoPopover
GoDialogs.alert()
GoSnackbarどのキーも塗られている

GoStyle.button()
GoStyle.tabs()


GoStyle.card()
GoForm
GoStyle.choice_grid()
GoSlotGrid

GoDatePicker
GoStyle.slider()
GoStyle.radio_group()
GoStyle.filter_chip()
GoSearchBar
GoStepper
GoTable
GoNavBar
GoTimePicker
GoCodeInput
GoWheelPicker夜は arcade_dark
暗いページでは、インクがずっと深くなってページそのものになり、塗りの色は変わらず鮮やかなままだ。

GoStyle.button()
GoBar
GoStyle.hud_panel()
GoSlot
GoJoystick

GoFab
GoRewardCalendar

GoTabView
GoScroll

GoStyle.chip()
GoSlotGrid
GoRangeSlider
GoPagination
GoBadgeアーケードの見た目のしくみ
面
どのキーもボードも GoStyleBoxArcade だ:インクの輪郭、グラデーションの本体、段、光沢を、
コントロール自身の矩形の中に描く — キーは状態が変わっても大きさが変わらず、押すと沈むだけだ。
読めるラベル
インクで縁取った白いラベルは、その縁取りが引き離すどんな塗りの上でも読める — WCAG は縁取りを文字の一部として数える。 どの塗りも、グラデーションのどの高さでもラベルが 4.6:1 を超えるまで調整される。
ウィンドウ
ウィンドウのタイトルは、インクで縁取った白い文字で金色のバナーに載り、隣に丸い赤の閉じるキーが付く。ダイアログ、 シート、ドロワー、ポップオーバーは厚い枠付きのボードだ。
キー1つに自分だけの色を塗れる — ポーズメニューのオレンジのショップキーのように:
menu.add_child(GoStyle.arcade_paint(GoStyle.button("Shop", _shop), Color("#FF8A1E")))
コミック:太いインクとくっきりした影
コミックの見た目は、どの面もマンガのコマのように描く — 太いインクの輪郭の中に表面の色を塗り、
右下へくっきりとしたベタの影を落とす。comic_light は紙のようなクリーム色のページに黒のインクで描き、
プライマリはコバルト。comic_dark は夜のページにクリーム色のインクで描き、プライマリは黄色だ。下の画像はすべて
本物の gohud の画面だ — 同じコードで、違うのはプリセットの1行だけ。
GoUi.use_preset(&"comic_light") # または &"comic_dark"

comic_light · ギャラリー
comic_dark · ギャラリー
GoSheet
GoCoachMark
GoDrawer
GoPopoverどのウィジェットもインクで
ボタン、トグル、タブ、スライダー、カード、フォーム、テーブル、ピッカー、チップがみなインクをまとう — 1つずつ スタイルを付ける必要はない。キーを押すと影が消え、面がスタンプのようにその位置へ沈む。 無効な面は影を失って薄くなるので、押せるものと押せないものがひと目で分かる。

GoStyle.button() — すべての種類


GoStyle.tabs()

GoStyle.slider()

GoStyle.card()
GoForm

GoTable
GoDatePicker
GoTimePicker
GoStepper

GoNavBar
GoInputGroup
GoSplitButton
GoPagination夜は comic_dark
暗いページでは黒い輪郭が消えてしまうので、comic_dark は輪郭をクリーム色で描き、同じインクの色をおびた
淡い影を落とす。HUD の部品 — クイックスロット、バー、スティック、報酬カレンダー — も同じルールに従う。

GoStyle.button()
GoSlot
GoBar
GoJoystick

GoSlotGrid
GoRewardCalendar

GoRangeSlider
GoSearchBar
GoFabコミックの見た目のしくみ
すべての面に1つの StyleBox
どの面も GoStyleBoxComic だ:塗り、輪郭、影を、コントロール自身の矩形の内側に描く。描くたびに GoConfig から輪郭と影の大きさを読むので、設定1つで画面全体が一度に変わる。
押すと平らになる
押したキーは影を落とすのをやめ、その位置へ移る。ホバーでは影が残り、フォーカスでは輪郭を決して覆わない内側のインクの輪が加わり、無効な面は影を失って薄くなる。
残りはスキンが描く
GoSkinComic は、コードが描くものにインクを入れる:クイックスロット、チップ、バッジ、アバター、通知、ナビゲーションバー、FAB、日付のセル、そしてノブが影を落とすスティック。
ウィンドウにはキャプション
ウィンドウのタイトルは、マンガのナレーションの枠のような黄色のキャプションに載り、隣にはインクで描いた丸い閉じるボタンが付く。ダイアログ、シート、ドロワー、ポップオーバーは不透明なインクのパネルだ。
昼も夜も読みやすい
どちらのパレットも、ほかのすべてのプリセットと同じ WCAG のコントラスト検査に通る。押したキーや無効なキーも含めてだ。キャプションの色がページに近すぎるときは、その輪郭がページの色に切り替わる。
レイアウトは変わらない
輪郭と影は各コントロールの内側に収まり、内側余白はテーマが与えたままなので、別の見た目でレイアウトした画面はそのままのレイアウトを保つ — プロジェクトのフォントもだ。
設定3つと呼び出し1つ
GoConfig の3つの設定が、すべてのコミックの面を一度に変える。作り直すものは何もない — 値を入れたそばから画面が描き直される。
GoUi.config.comic_border_width = 2.0 # 輪郭 (dp) — 既定は 3
GoUi.config.comic_shadow_size = 6.0 # 影 (dp) — 既定は 4
GoUi.config.comic_shadow = false # どこにも影を出さない
ウィジェット1つだけなら、設定に関係なく独自の道を行ける。最後の引数に true を渡すと、その中のすべても対象になる。
GoStyle.comic_shadow(skip_button, false) # このボタンは平らに
GoStyle.comic_shadow(card, true, true) # このカードとその中身すべては影を保つ
GoStyle.comic_border(title, 5.0) # これだけ輪郭を太く
tools/new_theme.py inked --from comic_light がパレットをコピーする。紙、
インク、プライマリの色を変えて tools/make_theme.py inked を実行すればいい。インクも影もスキンも一緒についてくる。
ゲーム画面ではこう見える
中世と SF のプリセット — キャラクターシート、インベントリ、クエスト。フォーム、グリッド、 プロンプトカード。角張ったパネルとタッチ操作。プリセットの切り替えはコード1行だ。
肩代わりしてくれるもの
ゲーム UI で時間を食うのはボタンの形ではなく、端末ごとにずれていくすべてだ。 gohud はそのずれを1か所で引き受ける。
寸法はすべてトークン
余白・角・文字サイズは数値で書かず名前で呼ぶ。テーマを差し替えれば画面全体がまとめて動く。
見える大きさ ≠ 押せる大きさ
閉じるボタンは 36dp に見えてタッチターゲットは 48dp。スロットが密集して重なる場所は、中心が近いほうが押下を取る。
ノッチとキーボード
HUD はセーフエリアの内側に収まり、仮想キーボードが出れば入力欄がその上へ持ち上がる。
戻るは1枚だけ閉じる
Escape と Android の戻るは最前面の1枚だけを閉じる。重ねたウィンドウがまとめて消えない。
通知は入力を奪わない
スナックバーの上を押しても、その下のボタンが反応する。フォーカスも奪わない。
アイコンは名前で頼む
ウィジェットが知っているのは GoIconSet.CLOSE だけ。セットを差し替えればコードに触れずに絵が変わる。 アイコン →
14の見た目、1行
GoUi.use_preset() がテーマ・スキン・アイコンをまとめて入れ替える — 丸み、面取りの SF、鍛造した中世の枠、Material 3 のアプリ部品、キッズのゼリーキャンディ、コミックのインク、アーケードの塗り。
読めるかどうかは測る
どのテーマも WCAG で測ってある。ボタンの状態ごとのラベルも、純白・純黒の上に載る半透明 HUD パネルも含めて。
gohud をインストール
入口は二つ。AI エージェントに任せるか、フォルダーをプロジェクトに入れるか — ほかに設定するものはない。
クイックスタート
五行でテーマの当たった画面が出る。最初から最後までは、インストールのページに。
見た目を変える — 色だけでなく形も
Theme が作り替えられるのはエンジンが描くものだけだ。StyleBoxFlat が持つ角は丸だけで、 スティック・クイックスロット・コーチマークはコードが直接描くため、テーマをいくら替えても形は変わらない。 そこで gohud は、テーマ・スキン・アイコンをひとまとまりで選ぶプリセットを用意している。
GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK) # テーマ・スキン・アイコンがまとめて替わる
| プリセット | 見た目 |
|---|---|
default_dark | gohud 本来の姿 — 丸い角、やわらかい青のアクセント |
default_light | 同じ形をライトパレットで |
scifi_dark | 面取りした角、シアンのネオン縁と発光、六角形のスティック、照準ブラケット |
scifi_light | 同じ角張った形を明るい設計図のパレットで |
medieval_dark | 暗い鉄と革、アンティークゴールドの枠、リベット、彫刻風アイコン、Cinzel の見出し |
medieval_light | 羊皮紙・インク・青銅に同じ鍛造の枠 |
material_light 新登場 | アプリ画面向けの Material 3 — ピル型ボタン、28dp のダイアログ、塗りのカード、アプリのナビゲーションバー・FAB・検索バー、Roboto |
material_dark 新登場 | 同じ Material 3 の形をダークのベースラインで |
kids_light 新登場 | 子ども向けのおもちゃ箱 — 太い縁取りと押すと沈む段を持つゼリーキャンディのキー、クレヨンの色、日だまりのように明るいページ |
kids_dark 新登場 | 同じおもちゃ箱を夜空色のページで |
comic_light 新登場 | マンガのコマ — どの面にも太いインクの輪郭とくっきりした影、紙のようなクリーム色のページに白いパネル。影、その大きさ、輪郭の太さは設定で変えられる |
comic_dark 新登場 | 同じインクを夜のページで — クリーム色の輪郭と黄色のプライマリ |
arcade_light 新登場 | アーケード筐体 — どのキーもグラデーション・光沢・段で塗られ、インクで縁取った白い文字のラベル。空色のページに厚い枠付きのボード、ウィンドウには金色のタイトルバナー |
arcade_dark 新登場 | 同じ鮮やかなキーを紺色のボードと夜のページで |
default_dark — 丸い角、やわらかい青のアクセント
default_light — 同じ形、ライトパレット
scifi_dark — 面取りの角、シアンのネオン
scifi_light — 同じ角張った形、設計図のパレットこの4枚は同じギャラリー画面だ。コードは1行も違わず、変えたのはプリセット名だけ。 ボタンの角、トグルの形、リストの行、入力欄の枠が、そろって動いているのが分かる。
中世コレクション
medieval_dark は鉄と革にアンティークゴールドを合わせ、medieval_light は羊皮紙とインクを使う。
メニューの枠にはリベットと小さな角飾りを置き、常に見えている HUD は静かなままにした。
彫刻風アイコン16種がアイテム名を描き直し、同梱の Cinzel フォントはタイトルとサブタイトルにだけ使う。
medieval_dark — 鉄と革
medieval_light — 羊皮紙とインクどちらも標準ウィジェットだけで組んだ examples/medieval/medieval.tscn だ。
中世テーマの解説と、自分だけの王国の作り方 →
同じ画面を、スマートフォンでもデスクトップでも
ギャラリーの4枚は縦持ちのスマートフォンだ。下は同じコードを 1280×800 で開いたもので、本文は読みやすい幅 (480dp) で止まって中央に立ち、HUD は隅に残る。フォームは浮かぶ HUD をよけて回り込むが、 もともと重なっていなければ動かない — 広い画面で無理に押しやると、本文が中心からずれてしまう。
default_dark · 1280×800
scifi_dark · 1280×800同じシート、違う見た目
エディタからは プロジェクト設定 → gohud → Theme → Preset で選び、設定リソースからは
GoConfig.preset で指定する。theme・skin・icons を明示的に
埋めると、そちらがプリセットより優先される — プリセットを選んだうえで1つだけ差し替えられる。
new_theme.py kingdom --from medieval_dark が、
継承した値をすべて書き出したパレットを作る。make_theme.py kingdom がテーマ・コントロールの絵・
スキンのダイヤルまで生成し、プリセットは選択リストに自動で現れる。設定とダイヤルのすべて →
スキン — テーマが届かない場所
スキンが受け持つのは、スティック、クイックスロットの面、コーチマークのリング、チップ、スケルトン、 アラート、区切り線、セクション見出しだ。継承して、変えたいものだけを上書きすればよい。
class_name MySkin extends GoSkin
func slot_box(accent: Color, lit: bool) -> StyleBox:
var box := GoStyleBoxCut.new()
box.bg_color = accent
box.cut = 6.0
box.edge_color = accent
return box
| クラス | 作れる形 |
|---|---|
GoStyleBoxCut | 角を斜めに切り落とした面取り、1辺だけ太いアクセント縁、外へにじむ発光 |
GoStyleBoxBracket | 中身を囲わず、四隅の印だけを引く |
GoStyleBoxMedieval | リベット・角の彫刻・ベベルのハイライト・素材の質感を持つ鍛造の枠 |
GoStyleBoxJelly | ゼリーキャンディ — 太い縁取り、押すと沈むしっかりした段、上が明るい本体と白いつや |
GoStyleBoxComic | マンガのコマ — 太いインクの輪郭とくっきりしたドロップシャドウ。どちらもゲーム実行中に GoConfig で大きさが決まる |
GoStyleBoxArcade | アーケードのキーやボード — グラデーションの本体、白い光沢、押すと沈む段、インクの輪郭。ボードは淡い内側を厚い色の枠で囲む |
6つとも Theme リソースへそのまま保存できる — だからこそテーマが色だけでなく形まで変えられる。
GoSkinSciFi、GoSkinMedieval、GoSkinMaterial、GoSkinKids、GoSkinComic、GoSkinArcade が同梱のサブクラスだ。



GoStyle.box() は必ず StyleBoxFlat を返す。 呼び出し側が受け取って
bg_color や corner_radius を調整するからだ。独自の形を保ったままにしたいときは
GoStyle.surface() を使う。
ウィジェット
部品を一覧で。ひとつずつ詳しく → · すべてのウィジェットを画像付きで → · ポップアップとダイアログの完全ガイド →
| クラス | 基底 | 役割 |
|---|---|---|
GoSurface | Control | 浮かぶカードの外殻 — 中央・下・アンカー配置、固定ヘッダーとフッター、スクロール本文、ドラッグでのサイズ変更 |
GoSheet | CanvasLayer | 下からせり上がるページ。専用レイヤーを持つので HUD より確実に上に出る |
GoDialogs | Node | await で受け取る確認と通知。取り消せない操作には destructive |
GoForm | MarginContainer | 幅に上限を設け、仮想キーボードを、avoid_hud なら HUD も避けるフォーム |
GoScroll | ScrollContainer | タッチでのスクロール。スクロールバーはカードの余白へ収まる |
GoNotice | PanelContainer | 入力もフォーカスも奪わないスナックバー |
GoPromptCard | PanelContainer | ゲームを止めずに尋ねるカード |
GoCoachMark | Control | 実物のコントロールを指し示すツアー。指した対象を押すと次へ進む |
GoHudAnchor | Control | HUD をセーフエリア内の9か所のどれかに留める |
GoBar | Control | 体力・マナ・経験値のバー。変化はなめらかに補間される |
GoSlot | Button | クイックスロット1つ — アイコン・個数・クールダウン・ショートカットを1つの面に |
GoJoystick | Control | 固定・追従・相対モードのバーチャルスティック |
GoIconButton | Button | 小さく見えて大きく押せる |
GoStyle | 静的 | ボタン、リスト行、入力欄、チップ、表、タブなどを同じ流儀で作る |
待たせる、伝える、数える
| クラス | 基底 | 役割 |
|---|---|---|
GoSnackbar | Node | 自分で居場所を決めるメッセージ |
GoSpinner | Control | 終わりの見えない待ち時間 |
GoBadge | PanelContainer | 未読の点、NEW の札、99+ |
フォームとリスト
| クラス | 基底 | 役割 |
|---|---|---|
GoField | VBoxContainer | 間違いを抱えられる行 |
GoInputGroup | HBoxContainer | ボタンと溶接された入力欄 |
GoCombobox | Button | 検索できるピッカー |
GoCodeInput | VBoxContainer | クーポンとギフトコード |
GoTable | VBoxContainer | 並べ替えできる見出し、選べる行 |
GoPagination | HBoxContainer | ページ番号、あるいは「もっと見る」の行 |
ゲームで実際に使う形
| クラス | 基底 | 役割 |
|---|---|---|
GoRewardCalendar | VBoxContainer | 毎日のログインボーナス |
GoRadar · GoDonut | Control | ひと目で分かるステータス |
GoCarousel | VBoxContainer | バナーとキャラクター選択 |
GoKbd | HBoxContainer | 嘘をつかないキー表示 |
画面の上に重ねる
| クラス | 基底 | 役割 |
|---|---|---|
GoDrawer | CanvasLayer | 横から出るパネル |
GoPopover | RefCounted | 脇に留まるカード |
GoContextMenu | RefCounted | 長押しと右クリック |
GoConsole | CanvasLayer | 開発者コンソール |
Go HUD Skill
gohud には AI スキルが入っている — API のすべて、すぐ動くテンプレート、プレビュー起動器。下の文をまるごとコーディングエージェントに貼れば、gohud を入れて使い方まで覚える。
読みやすさは目分量ではなく実測で決める
「きれい」は好みだが、「読める」は測れる。 薄い灰色の文字は良いモニタでは平気に見えて、 日中の屋外ではスマートフォンから消える — 目で選んでいれば、いつか必ずそうなる。
python3 addons/gohud/tools/check_contrast.py
すべての色の組み合わせと、ボタンの状態ごとのラベルとその下のパネルを、14のテーマすべてで WCAG に 照らして測る。半透明の色は実際の背景に合成してから測る — そのまま測ると、画面に出ている見え方より 良い比率が出てしまう。
だから文字色は選ぶのではなく導き出す。ビルダーはパレットの値を出発点にして、その文字が載りうる すべての面でしきい値を超えるまで明度を押し上げる。パレットを変えればコントラストも追従する。 その規則と、背後にある落とし穴 →
検査・リリース・このサイト
入口1つですべての検査が走る。それぞれが、ほかからは見えないものを見ている。
bash addons/gohud/tools/check_all.sh
| 検査 | 捕まえるもの |
|---|---|
4つの画面サイズでの run_tests.sh | ウィジェットの挙動とレイアウト、RTL での位置、キーボードフォーカス、実行時のスキンのコントラスト、全プリセット |
new_project_check.sh | ホストプロジェクトへの隠れた依存。--zip なら配布物そのまま、--export なら Web ビルドまで |
check_contrast.py | 全テーマファイルの WCAG コントラスト — ボタンの状態も半透明パネルも含めて |
check_generated.py · check_scaffold.sh | 生成されたテーマがパレットと一致するか、使い捨てのテーマが生成できてコントラストを通るか |
check_package.py | package.json のバージョンの反映、変更履歴の移動、ZIP の中身を一時コピー上で |
check_site.py | このサイトのリンク・アンカー・文書言語・用語集・ダイヤル表 |
リリース版を作る
cat addons/gohud/package.json # { "version": "1.1.0" }
bash addons/gohud/tools/release.sh # 検査すべて → ZIP → 空プロジェクトで検証
bash addons/gohud/tools/package.sh # 1.1.0 → builds/1.1.0/gohud-1.1.0.zip
バージョンは package.json に書かれた値で、パッケージングがそれを上げることはない。
新しいバージョンを出すときは、先にその数字を書き換える。
成功すると plugin.cfg・GoUi.VERSION をその値に合わせ、そのバージョンを初めてパッケージングしたときだけ CHANGELOG.md の Unreleased の記述を日付付きの項目へ移す。
同じバージョンでもう一度実行すると ZIP を作り直して前のものと置き換える。失敗すれば何も変わらない。
ZIP にはこのサイトもテストもツールも package.json も入らない。
このサイト
python3 addons/gohud/tools/make_site.py # 用語集とスキンのダイヤル表をソースから生成する
python3 addons/gohud/tools/check_site.py # リンク・アンカー・言語・用語集・生成された表を検査する
bash addons/gohud/tools/site_shots.sh /tmp/shots # 各ページのデスクトップ幅とスマートフォン幅を撮る
ページは www/ にあるただの HTML だ — ルートが英語、ko/ が韓国語。
GitHub Actions のワークフローがこのフォルダをサイトのルートとして公開する。