はじめに
HPゲージ・経験値バー・ロード画面の進捗表示——ゲームに欠かせない「バー型の進捗UI」を手軽に作れるのが ProgressBar です。ColorRect を重ねて自作する方法もありますが、ProgressBar を使えばゲージの塗りつぶしロジックを自分で書かずに済みます。
この記事では、ProgressBar の仕組みと使いどころ、カスタマイズ方法を紹介します。
ProgressBarとは?
ProgressBar は 最小値・最大値・現在値を設定すると、その割合をバー(帯)で視覚的に表示するUIノードです。値を変えるだけでゲージの長さが自動で更新されます。
温度計をイメージしてください。目盛りの最小・最大が決まっていて、現在の温度に応じて液体が伸び縮みします。ProgressBar はその「伸び縮みする液体の部分」を自動で計算して描画してくれるノードです。
継承ツリーは ProgressBar → Range → Control → CanvasItem → Node です。Range クラスを継承しているため、Slider や SpinBox と共通のプロパティ(min_value・max_value・value・step)を持っています。

このノードを使うべき場面
- HPゲージ・MPゲージ:キャラクターの体力・魔力の残量を画面上部に表示するとき
- 経験値バー:現在の経験値と次のレベルまでの距離を帯で表示するとき
- ロード画面の進捗:リソースの読み込み進捗をパーセントとバーで表示するとき
- クエスト・実績の進捗:「敵を10体倒す」などのタスク達成度を視覚化するとき
- チャージゲージ・クールダウン:スキルが使えるようになるまでの残り時間を表示するとき
別のノードが適切な場面:
- デザインを完全に独自にしたい(角丸・グラデーション・アニメーション込み) → ColorRect(029)やシェーダーで自作する方が自由度が高い
- ユーザーが値をドラッグで変更できるようにしたい →
HSlider/VSliderを使う
主なプロパティと機能
ProgressBar と親クラス Range の代表的なプロパティをまとめました。
| プロパティ | 型 | 役割 |
|---|---|---|
min_value |
float | ゲージの最小値(デフォルト: 0) |
max_value |
float | ゲージの最大値(デフォルト: 100) |
value |
float | 現在の値。この値を変えるだけでゲージが更新される |
step |
float | 値の最小変化単位。0 にすると滑らか(連続値)になる |
show_percentage |
bool | true でバーの上に「75%」などのテキストを自動表示する |
fill_mode |
enum | 塗りの方向(左から・右から・上から・下から・中央から) |
コード例:HPゲージをダメージで減らす
@onready var hp_bar: ProgressBar = $HPBar
var max_hp := 100.0
var current_hp := 100.0
func _ready() -> void:
hp_bar.min_value = 0
hp_bar.max_value = max_hp
hp_bar.value = current_hp
hp_bar.show_percentage = false # ゲームHUDではテキスト非表示にすることが多い
func take_damage(amount: float) -> void:
current_hp = clamp(current_hp - amount, 0.0, max_hp)
hp_bar.value = current_hp
コード例:Tween でゲージをなめらかに変化させる
func set_hp_smooth(new_hp: float, duration: float = 0.4) -> void:
var tween := create_tween()
tween.tween_property(hp_bar, "value", new_hp, duration)\
.set_trans(Tween.TRANS_SINE)\
.set_ease(Tween.EASE_OUT)

もっと使いこなす:カスタマイズできるパラメータ
まずは基本を動かしてみてから、余裕が出たら試してみてください。
| パラメータ・テクニック | 変えると何が起きるか |
|---|---|
show_percentage を false に |
パーセント表示が消え、ゲージだけのすっきりした見た目になる。ゲームHUDでよく使う設定 |
fill_mode を END(右から)に |
右端から左方向に塗りが伸びる。タイムリミットの残り時間ゲージに使いやすい |
fill_mode を CENTER に |
中央から両端に向かって塗りが広がる。チャージや充電の演出に向いている |
Tween で value をアニメーション |
ダメージや回復のゲージ変化が滑らかになり、ゲームらしい見た目になる |
| Theme Overrides でスタイルボックスを変える | バーの色・背景色・角丸・ボーダーをカスタムスタイルに変更できる。デザインの核心部分 |
step を 0 に |
値が連続変化するので Tween との組み合わせでなめらかなアニメーションになる |

まとめ
ProgressBar は 「最小・最大・現在値を設定するだけでゲージを自動描画してくれるノード」 です。
valueを書き換えるだけでゲージが更新される。ColorRect で自作するより圧倒的にシンプル- Tween と組み合わせた
valueアニメーションで、ゲームらしい滑らかな演出が手軽に作れる - Theme Overrides のスタイルボックスでデザインを自由にカスタマイズできる
次回は、チェックボックスとして使える CheckBox を紹介します。
シリーズ:Godot 4 ノード解説
- 001:Node(基底クラス)
- 002:Node2D
- 003:Sprite2D
- 004:AnimatedSprite2D
- 005:CharacterBody2D
- 006:CollisionShape2D
- 007:Area2D
- 008:RigidBody2D
- 009:Camera2D
- 010:Label
- 011:RichTextLabel
- 012:LineEdit
- 013:Button
- 014:HBoxContainer
- 015:VBoxContainer
- 016:GridContainer
- 017:ScrollContainer
- 018:Panel
- 019:TabContainer
- 020:SplitContainer
- 021:HSplitContainer
- 022:VSplitContainer
- 023:FlowContainer
- 024:MarginContainer
- 025:CenterContainer
- 026:AspectRatioContainer
- 027:SubViewportContainer
- 028:TextureRect
- 029:ColorRect
- 030:ProgressBar(この記事)
- 031:CheckBox
- 032:CheckButton
- 033:OptionButton
この記事はGodot 4.xをもとに執筆しています。


コメント