あなた:
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っぽい説明もできるよ!欲しい?