俺に解るように説明する "Godot Engine 3.x" 入門+

ゲームエンジン Godot Engine に関すること。入門とか使い方とかチュートリアルとか、あれとかこれとか。日本語解説。

Godot 音シュー08「出たら、色、戻す。」

今回はキューブが抜けたら色を戻すだけ。一言でいうと。「Area」のシグナル"body_exited()"を使えばいい。それだけ。

f:id:ore2wakaru:20180616133338p:plain

だけど、あれだなー。考えながら、作りながらだと、思ったよりあんま、進まねーな―。


ちょっと変更

[1] 「Label」ノード

f:id:ore2wakaru:20180616110414p:plain

  1. カウントダウンを表示させてる「Label」ね。スタート時点で"Ready"って表示するようにした。普通にTextのとこに書けばイイ。なんとなく、こんなのがあった方が普通っぽいよね。
  2. 元はScale 3倍だったが、文字が見た目小さいので"5"倍に。でも、表示がきたねーなー。やっぱ、フォント入れよっかな。

[2] 「MeshInstance」ノードのMesh

f:id:ore2wakaru:20180616111546p:plain

  1. 元は1辺60cmだったが、"61"cmに変更。面がキューブと同じだとチカチカする。

[3] 「CollisionShape」ノードのShape

f:id:ore2wakaru:20180616112206p:plain

  1. これも元は1辺60cmだったが、"2"cmに変更。多分60cmだと反応範囲が大きすぎると思う。数値はなんか、半径で入れる様だ。

こんな感じに、親のScaleをいじって一気に大きさを変えるより、MeshShapeは個別に大きさを設定する方がイイよね。融通が利く。(キャラコンの0102参照)


本日のメイン

トイレも出たらドアを戻すように、キューブも出たらエリアの色を戻す。やり方は簡単。エリアからボディーが出たときもシグナルが出る機能("body_exited()")があるから、これを利用するだけ。

f:id:ore2wakaru:20180616114407p:plain

スクリプトはこうなる。

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」に関して分かってないからだと思う。

f:id:ore2wakaru:20180616115633p:plain

シーンに付けるか、またはカメラに付けるかして、機能させるようなんだけど、今んとこよく分からんワ。デフォだと、ルートにある"default_env.tres"ってのが機能してるっぽい。

f:id:ore2wakaru:20180616121212p:plain

いつか何とかしよう。


メンドイけど、4ヶ所に

左のエリアだけじゃなくて、上下左右4か所のエリアでも同様の仕組みを作ってテストだ。4か所に同じことやるのはめんどが。。。

  • シグナルの送り先間違え、、、注意。
  • マテリアルの入れ忘れ、、、注意。

※====

[Ctrl] + [D]で作ったものは、1ヶ所変えると自動で全部に反映される? いじった記憶は無いけど、上下と右のMeshShapeの大きさ、勝手に変わってたようだ。

これは、便利なようで不便なような。。。 それか俺の勘違いか。

====※

テスト。

f:id:ore2wakaru:20180616125742g:plain

(最後の1こ、GIFのタイミングに合ってないな、、、)

微妙な前進だけど、いいんじゃない。次は、キー入力で得点だ。