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

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

Godot 玉転がし 12 「回収物 信号&消すスクリプト」

12個置くと言っておきながら、まだ1個しかないので、まず増やしたいのだが、、、。ま、増やすだけなら、複製の「Ctr+D」であっと言う間に出来るけど。その前に、信号の発信・受信の準備しよう。そして、消えるスクリプトを書いて、それから増やして・・・。んー、今回は、このGIFみたいになればゴールとしよう。 f:id:ore2wakaru:20180315012405g:plain


消えるスクリプト と 信号

[1]
コレクタブルは、ちょっとナナメってる感じにするので、xzを45度傾ける。
f:id:ore2wakaru:20180314230817p:plain

[2]
フォルダに移しておく。今回も「Spatial」ノードをフォルダ代わりにした。(好きにリネームするがよい。)
f:id:ore2wakaru:20180314235651p:plain

[3]
消えるスクリプトを書くのだが、その前に信号(signal)の設定。エリアノードの子に付けたコリジョンシェイプが判定する範囲なんだけど、ここに物体が入ってきた時、信号を出せるようになっている。便利便利。信号に関しては、前やった「ボタンを押したらどうやらこうやら」って、それと同じ。時間あいちゃったし、復習だな。
f:id:ore2wakaru:20180315000243p:plain

  1. Area」ノードが選択されていること。信号を出すノード。
  2. ノードパネルにする。
  3. [body_entered( Object body )]をダブルクリック。(又は、写真には映ってないけど、下の[Connect..]ボタンで。)
    色々信号があるようだが、今回はリジッドボディーの侵入判定だから、body_enteredでイイ。ま、分かりやすくてよかったわい。

[4]
窓が開くので、信号を送る先を決める。送り先にはスクリプトが付いてることが前提だったかな。
f:id:ore2wakaru:20180315013901p:plain

  1. Area」ノードに付けたスクリプトで処理するので、ココを選択。
  2. [Connect]ボタンで決定。
  3. 信号を受けたときに呼ばれる関数(メソッド)名が自動的に書かれるが、イヤなら自分で名前を変えてもOKポッキー。

[5]
スクリプトエディタが開くから、関数の中身(ファンクションボディー)にqueue_free()queue_free()free()の違い、前やったの覚えてるかな? f:id:ore2wakaru:20180315003222p:plain

[6]
ここでちょっとテストしてみるべ。
f:id:ore2wakaru:20180315003748g:plain

消えた。ok! OK!


増やして並べてほいさっさ

Ctrl+D」で複製。
f:id:ore2wakaru:20180315011105p:plain

12個は同じところに重なっているから、適当に位置を変える。
f:id:ore2wakaru:20180314232622p:plain

シーン再生で、上手い事全部消えればOK!

Ctrl+D」で複製しても、1っこ1っこ、ちゃんと自分自身が消えるんだよね。なかなかすごいもんだ。ありがとうGodot君。


次は、全回収後、「WIN」と表示させよう。これで、完成のハズ。次回最終回。油断するな、俺!

では、また。