0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ GODOT 4 ] Timerノードの使い方

0
Posted at

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秒ごとに弾を撃つ実装例)

具体的な設定手順とスクリプトへの接続フローです

🛠️ 設定の全体フロー

  1. Step 1: シーンに Timer ノードを追加する
  2. Step 2: インスペクターで時間を設定し AutostartをONにする
  3. Step 3: スクリプトに timeout() シグナルを接続して処理を書く

📌 Step 1: ノードの追加

  1. タイマーを使いたいシーン(例: キャラクターのシーンなど)を選択します
  2. + ボタンを押し Timer を検索して子ノードとして追加します

📌 Step 2: インスペクターの設定

  1. 追加した Timer ノードを選択します
  2. インスペクターで以下のように設定を変更します
    • Wait Time : 3.0 (3秒ごとに実行したい場合)
    • One Shot : false (ループさせたいのでチェックを入れない)
    • Autostart : true (ゲーム開始と同時にスタートさせます)
      image.png

📌 Step 3: シグナルの接続とコード記述

  1. Timer ノードを選択した状態で 画面右側の「シグナル」タブを選択します
  2. timeout() をダブルクリックし 接続先に対象のスクリプトを選択して「接続」を押します
  3. 生成された関数の中に 実行したい処理(例: 弾を生成する関数など)を記述します

image.png


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("クールタイムが終了しました! 次のスキルが使えます")
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?