Godot Engineで2Dゲームを制作するための備忘録です。
この記事はGeminiを活用して作成しました。
1. はじめに
Timerノードは ゲーム開発において「一定時間ごとに処理を実行する」「数秒後に特定のイベントを発生させる」など、時間をトリガーにした処理を作るときに欠かせない非常に便利なノードです
画面上に表示される見た目(テクスチャなど)はありませんが バックグラウンドで正確に時間をカウントしてくれます
スクリプトで複雑な時間計測の計算コードを書かなくても ノードを配置してシグナルを繋ぐだけで簡単にタイマー処理が実装できます
主な用途
- 敵キャラクターが3秒ごとに弾を発射する
- スキルを使った後のクールタイム(再使用までの待ち時間)の管理
- 制限時間付きのアクションゲームやパズルゲームのカウントダウン
- アイテムの効果が5秒間だけ持続するバフ・デバフの演出
2. 代表的なプロパティ
インスペクターで設定する Timerノードの重要なプロパティです
| プロパティ | 説明 |
|---|---|
| Process Callback | タイマーの時間を進めるタイミングが物理フレーム(Physics)か通常フレーム(Idle)かを指定します |
| Wait Time | タイマーが満了するまでの時間(秒単位)を設定します(例: 2.0 = 2秒) |
| One Shot | trueにすると1回だけカウントして停止します false(デフォルト)なら自動でループします |
| Autostart | trueにすると ゲーム(シーン)が開始された瞬間に自動でカウントを始めます |
3. 代表的なシグナル
Timerノードが持つ最も重要でよく使うシグナルです
| シグナル | 発火するタイミング |
|---|---|
| timeout() |
Wait Time で設定した時間がゼロ(満了)になった瞬間に呼び出されます |
💡 ポイント: 基本的にはこの
timeout()シグナルをスクリプト(親ノードなど)に接続して 実行したい処理を中に書き込みます
4. 使い方(3秒ごとに弾を撃つ実装例)
具体的な設定手順とスクリプトへの接続フローです
🛠️ 設定の全体フロー
- Step 1: シーンに Timer ノードを追加する
- Step 2: インスペクターで時間を設定し AutostartをONにする
-
Step 3: スクリプトに
timeout()シグナルを接続して処理を書く
📌 Step 1: ノードの追加
- タイマーを使いたいシーン(例: キャラクターのシーンなど)を選択します
-
+ボタンを押しTimerを検索して子ノードとして追加します
📌 Step 2: インスペクターの設定
- 追加した
Timerノードを選択します - インスペクターで以下のように設定を変更します
📌 Step 3: シグナルの接続とコード記述
-
Timerノードを選択した状態で 画面右側の「シグナル」タブを選択します -
timeout()をダブルクリックし 接続先に対象のスクリプトを選択して「接続」を押します - 生成された関数の中に 実行したい処理(例: 弾を生成する関数など)を記述します
5. 補足: スクリプトからの制御(応用)
インスペクターのAutostartを使わずに プレイヤーの行動(ボタン入力や攻撃など)に合わせてスクリプトから手動でタイマーを開始・停止させる方法です
extends CharacterBody2D
@onready var timer = $Timer
func _unhandled_input(event):
# 攻撃ボタン(スペースキーなど)が押された時
if event.is_action_pressed("ui_accept"):
start_skill_cooldown()
func start_skill_cooldown():
print("スキル発動! クールタイム開始")
# スクリプトからタイマーを2秒に設定してスタートさせる
timer.start(2.0)
# timeout()シグナルに接続された関数
func _on_timer_timeout():
print("クールタイムが終了しました! 次のスキルが使えます")

