敵に当たった瞬間にキャラがカクッと点滅する、メニューがパッと切り替わる、HPバーの数値がいきなり飛ぶ——動いてはいるけれど、どこか安っぽく見える。その差を生んでいるのが「滑らかさ」です。
こうした「時間をかけた値の変化」を、Godotでは Tween がひとことで書けます。create_tween() を呼んで「どのノードの・どのプロパティを・何秒かけて・いくつまで変えるか」を予約するだけ。UIのスライドインも、ダメージ点滅も、HPバーのじわ減りも、すべて同じ仕組みで作れます。
この記事でわかること
create_tween()とtween_property()の基本形(撃ちっぱなしで動く手軽さ)set_trans/set_easeによる イージング(緩急) の付け方- アニメーションの 連結(順番)と並列(同時)、
awaitでの完了待ちkill()での競合防止と、AnimationPlayerとの使い分け
動作確認環境: Godot 4.7
Tweenの基本:1行で始める滑らかな動き
Tweenの考え方は、「 あるノードの・あるプロパティを・指定した時間で・目標の値まで滑らかに変化させる 」という、とてもシンプルなものです。

Godot 4では create_tween() でTweenを作り、tween_property() でアニメーションを予 約します。
func _ready() -> void:
# 1. Tweenオブジェクトを生成する
var tween := create_tween()
# 2. アニメーションを予約する
# $Sprite2D の position を、1秒かけて (500, 300) まで動かす
tween.tween_property($Sprite2D, "position", Vector2(500, 300), 1.0)
create_tween() で作ったTweenは、予約したアニメーションがすべて終わると 自動的に停止してメモリから解放 されます。この「撃ちっぱなし(Fire and Forget)」で使える手軽さが、Tweenの一番の魅力です。動かしたいときに1本作って予約するだけで、後片付けを気にせず使えます。
注意: Tweenを作ったノードが
queue_free()で消えると、そのTweenも一緒に止まります。ノードの寿命を超えて演出を続けたい場合(例: 敵が消えたあとも爆発エフェクトを最後まで見せたい)は、演出を別の生き残るノード側で作るか、Autoloadで管理することを検討します。
イージングで「緩急」を付ける
ただ一定の速度で動かすだけでは、まだ機械的な印象です。動きの「加速・減速」を決めるのが イージング で、set_trans()(変化のカーブの種類)と set_ease()(カーブのどこで緩急を効かせるか)の2つで指定します。

同じ「0.5秒で移動」でも、終わりに向かってスッと減速する(EASE_OUT)だけで、ぐっと上質な動きになります。
func show_menu() -> void:
var menu := $MenuPanel
menu.visible = true
# いったん画面右の外側へ置く
var viewport_width := get_viewport_rect().size.x
menu.position.x = viewport_width
var tween := create_tween()
# TRANS_SINE = サインカーブでなめらかに / EASE_OUT = 終わりで減速
tween.tween_property(menu, "position:x", viewport_width - menu.size.x, 0.5) \
.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT)
position:x のように プロパティ名の後ろに :x を付ける と、その成分だけをアニメーションできます。よく使うのは、入ってくるUIは EASE_OUT(勢いよく入って終わりで止まる)、消えるUIは EASE_IN(じわっと加速して去る)です。迷ったらまず TRANS_SINE + EASE_OUT を試すと、たいていの演出が自然になります。
実践的なコード レシピ集
レシピ1:HPバーの滑らかな増減
ダメージや回復を即座に反映するより、HPバーがじわっと動くほうが、プレイヤーは変化を直感的に捉えられます。ProgressBar の value をTweenで動かすだけです。

@onready var hp_bar: ProgressBar = $ProgressBar
func update_health_smoothly(new_health: float) -> void:
var tween := create_tween()
# value を 0.4秒かけて new_health へ。両端がなめらかになるEASE_IN_OUT
tween.tween_property(hp_bar, "value", new_health, 0.4) \
.set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN_OUT)
減った分を少し遅れて追いかける、2本重ねのゲージは HPバー入門 で作ります。
レシピ2:被ダメージの点滅(無敵時間の表現)
ダメージを受けた直後の無敵時間などを、点滅で見せる定番の演出です。modulate のアルファ値(透明度)を往復させ、set_loops() で回数を指定します。
