値を持つシグナル
CoddyのGodotジャーニー「シグナルと衝突」セクションの一部。レッスン 8/27。
シグナルは値を運ぶことができます。これは、body_enteredがボディを運ぶのと同じです。シグナルを宣言するときに、値を角括弧で囲んで列挙します。
signal collected(points)値は同じ順序でemit()に渡します。
collected.emit(points)collectedに接続されたすべての関数がその値を受け取ります。ここでは、Mainのスクリプトがポイントをスコアに加算して表示します。
func _on_gem_collected(points):
score += points
print("Score: ", score)どちらの宝石も同じスクリプトを実行します。小さい宝石のpointsは10、大きい宝石のpointsは25で、それぞれのノードでインスペクターから設定します。そのため、入力した数値ではなく、pointsを送ります。
チャレンジ
簡単各宝石が獲得ポイントをmain.gdに伝えるようにしましょう。
gem.gdの先頭でsignal collected(points)を宣言します。_on_body_enteredの最後で、宝石のpointsを使ってシグナルを送信します。
両方の宝石の上を歩いて通過します。コンソールにScore: 10、続いてScore: 35と表示されるはずです。
自分で試してみよう
extends Area2D
@export var points = 10
func _ready():
body_entered.connect(_on_body_entered)
func _on_body_entered(body):
if not visible:
return
visible = false
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
シグナルと衝突のすべてのレッスン
自分で練習してみよう: Godotプレイグラウンド