あなた:
GDScript2で、一定時間ごとに処理をさせる方法は
GDScript 2(Godot 4以降)で「一定時間ごとに処理をさせる」方法はいくつかありますが、代表的な方法をいくつか紹介します。
Timer
ノードを使う(おすすめ)GodotのTimer
ノードを使うと、一定間隔で自動的に処理を呼び出せます。
Timer
ノードをシーンに追加する(名前: MyTimer
など)
Wait Time
に間隔(例:1.0秒)を設定
Autostart
をONにする
timeout
シグナルを接続する
gdscriptextends Node func _ready(): $MyTimer.timeout.connect(on_timer_timeout) func on_timer_timeout(): print("一定時間経過!")
await
とSceneTreeTimer
を使う(コードだけで完結)非同期処理(await
)で時間待ちも可能です。
gdscriptextends Node func _ready(): run_timer_loop() func run_timer_loop() -> void: while true: await get_tree().create_timer(1.0).timeout print("1秒ごとに処理実行")
_process()
や_physics_process()
を使って自前でカウントタイマーを使わずに自分で時間を計測したい場合はこちら。
gdscriptextends Node var time_accumulator := 0.0 var interval := 1.0 func _process(delta: float) -> void: time_accumulator += delta if time_accumulator >= interval: time_accumulator = 0.0 print("1秒経過!")
Timer
ノード:視覚的に管理しやすく、信頼性が高い
await create_timer()
:コードだけで済ませたいときに便利
_process()
:細かい制御が必要な場合に
どういう場面で使いたいか教えてくれたら、もっと合ったやり方も提案できるよ!
timeout
シグナルを接続する方法は2つあります:エディタでGUIから接続する方法と、GDScriptコードから動的に接続する方法です。ここでは後者、「コードから接続する方法」を詳しく説明します。
timeout
シグナルを接続する方法Timer
ノードのtimeout
シグナルを関数に接続gdscriptextends Node func _ready(): var timer = $Timer timer.timeout.connect(on_timeout) func on_timeout(): print("タイマーの時間になりました!")
gdscriptextends Node func _ready(): var timer = Timer.new() timer.wait_time = 1.0 timer.autostart = true add_child(timer) timer.timeout.connect(on_timeout) func on_timeout(): print("動的に作ったタイマーが発火")
.connect()
の書き方は以下のように「関数名だけ」を渡します(コールバックではなく関数参照)
timeout.connect(on_timeout)
←これは on_timeout
関数の参照を渡している
関数名のスペルミスや、シグナル名のタイプミスに注意!
ノードがまだ存在していないタイミング(_ready()
より前)で接続しないように!
必要なら、エディタでの接続方法も説明できるよ〜!
GodotエディタのGUIから Timer
ノードの timeout
シグナルを接続する手順は以下の通りです!
timeout
シグナルを接続する方法(Godot 4対応)Timer
ノードの timeout
シグナルが発火したときに、自分のスクリプト内の関数が呼ばれるように接続します。
Timer
ノードを選択
シーンツリーで Timer
ノードをクリックします。
右側の「ノード」タブを開く
インスペクターの右隣にある「ノード」タブ(⚙️みたいなアイコン)をクリックします。
timeout()
シグナルを探す
一覧に表示されている「timeout()
」をダブルクリック、または選択して右下の「接続(Connect)」ボタンを押します。
接続先と関数名を設定
ポップアップが出るので:
接続先ノード(例:Main
など、自分のスクリプトがアタッチされているノード)を選ぶ
メソッド名はデフォルトで on_Timer_timeout
(ノード名ベース)になります。変更してもOK。
「接続」ボタンを押す
スクリプトに関数が自動生成される
gdscriptfunc _on_timer_timeout() -> void: print("タイマー発火!")
ノード名が Timer
なら、関数名は func _on_timer_timeout()
になります
自動で connect()
されるので、自分で書く必要はありません
この方法は初心者に優しく、デバッグもしやすいです!
必要ならスクリーンショット風に解説したり、アニメーションGIFっぽい説明もできるよ!欲しい?