Godot 音シュー08「出たら、色、戻す。」
今回はキューブが抜けたら色を戻すだけ。一言でいうと。「Area」のシグナル"body_exited()"を使えばいい。それだけ。
だけど、あれだなー。考えながら、作りながらだと、思ったよりあんま、進まねーな―。
ちょっと変更
[1] 「Label」ノード
- カウントダウンを表示させてる「Label」ね。スタート時点で"Ready"って表示するようにした。普通にTextのとこに書けばイイ。なんとなく、こんなのがあった方が普通っぽいよね。
- 元はScale 3倍だったが、文字が見た目小さいので"5"倍に。でも、表示がきたねーなー。やっぱ、フォント入れよっかな。
[2] 「MeshInstance」ノードのMesh
- 元は1辺60cmだったが、"61"cmに変更。面がキューブと同じだとチカチカする。
[3] 「CollisionShape」ノードのShape
- これも元は1辺60cmだったが、"2"cmに変更。多分60cmだと反応範囲が大きすぎると思う。数値はなんか、半径で入れる様だ。
こんな感じに、親のScaleをいじって一気に大きさを変えるより、MeshやShapeは個別に大きさを設定する方がイイよね。融通が利く。(キャラコンの01、02参照)
本日のメイン
トイレも出たらドアを戻すように、キューブも出たらエリアの色を戻す。やり方は簡単。エリアからボディーが出たときもシグナルが出る機能("body_exited()")があるから、これを利用するだけ。
スクリプトはこうなる。
extends MeshInstance var spaMat #自身が持つSpaialMaterialの情報操作用 func _ready(): #メッシュとマテリアルが入ってないとエラーになるから注意 spaMat = get_surface_material(0) #0番目に入ってるヤツの情報ゲット #キューブ入ったよ(signal from 「Area_l」) func _on_Area_l_body_entered(body): #色変えるぜ spaMat.albedo_color = Color("#ff0000") #キューブ出たよ(signal from 「Area_l」) func _on_Area_l_body_exited(body): #色戻すぜ spaMat.albedo_color = Color("#ffffff")
問題はなかろう。
ただ、"Color("#ffffff")"は白なんだけど、画面には水色で見えるんだよね。たぶんこれは、俺が「Environment」に関して分かってないからだと思う。
シーンに付けるか、またはカメラに付けるかして、機能させるようなんだけど、今んとこよく分からんワ。デフォだと、ルートにある"default_env.tres"ってのが機能してるっぽい。
いつか何とかしよう。
メンドイけど、4ヶ所に
左のエリアだけじゃなくて、上下左右4か所のエリアでも同様の仕組みを作ってテストだ。4か所に同じことやるのはめんどが。。。
- シグナルの送り先間違え、、、注意。
- マテリアルの入れ忘れ、、、注意。
※====
[Ctrl] + [D]で作ったものは、1ヶ所変えると自動で全部に反映される? いじった記憶は無いけど、上下と右のMeshとShapeの大きさ、勝手に変わってたようだ。
これは、便利なようで不便なような。。。 それか俺の勘違いか。
====※
テスト。
(最後の1こ、GIFのタイミングに合ってないな、、、)
微妙な前進だけど、いいんじゃない。次は、キー入力で得点だ。