値を持つシグナル
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プレイグラウンド