一定時間待って処理する

一定時間待って処理したい場合の実装方法はいくつかあります。

カウンターを使って処理する

_process()または_physics_processでカウンター変数に数値を足していき、特定の値になったら処理を実行する方法です。

var counter:int = 0

func _process(_delta):
    counter += 1
    if _counter == 10:
        print("do something")

加算でも減算でも構いませんが、一度しか使用しない場合は変数をむやみに増やしてしまう事がデメリットです。

タイマーノードを使って処理する

Timerノードは、指定した時間でシグナルを発行するノードになります。
シグナルを受け取ることで特定の処理を行う事ができます。

@onready var timer = $Timer

func _ready():
	timer.timeout.connect(func(): print("test"))
	timer.one_shot = true
	timer.start(0.5)

one_shottrueにしないと、指定した時間で設定したメソッドが繰り返し実行されます。
時間で指定するため、フレーム単位での指定はできません。

Engine.get_frames_per_second()fpsを取得して1/fpsとすることで1フレームを実現することはできますが、フレームレートが可変の場合は不安定になるため、時間で指定することをおすすめします。

コルーチンを使って処理する

シーンツリーに直接one_shotで消えるTimerノードを設定することも可能です。

func _ready():
	await get_tree().create_timer(0.5).timeout
	print("test")

awaitを使用することで、シンプルに書く事ができますが、非同期処理ですので、処理の順番に注意する必要があります。

var str_test:String = ""

func _ready():
	await get_tree().create_timer(0.5).timeout
	str_test = "test"

func _process(_delta):
    print(str_test)
    # 0.5秒以降でないとstr_testは空になっている。

更に詳しいawaitの使用方法は以下をご覧ください。

Godot 4 await構文

submaxさんによる記事

トップにもどる
お役に立てましたか?
シェアしてGodot Engineを広げましょう!