P5.エアホッケー.06「スポーンさせたシーンを綺麗に消す方法」
前回最後の所で言った、「シーンを元から消す」って言うのがどういうことか、具体的に確認する。屁理屈なんか要らないんだ。目で見て分かるようにするぜ。カモン Debug Console!
デバッグコンソール(Debug Console)で視覚的に確認
まずは、プロパティエディタ > Render タブ > Armory Project > Flags の中の Debug Console にチェックだ!
ここにチェックを入れてゲームを開始すると下図のように、画面の右上に4つのタブが表示されるようになる。これで色んな情報が見れるようになるわけだ。
❶ 空のタブ: 情報を非表示にしたい時、ココクリック。
❷ Scene: アクティブなシーン(?)名と、それ中に入ってるオブジェクトが表示される。使ってないシーンは表示されない。オブジェクト名をクリックすると、下の Properties に Transform 情報が出るみたいだな。
❸ delta 秒が表示されてるとこ: ゲームパフォーマンスなんかが見れる感じ?
❹ Console: Print
ノードで情報出力したものがここ表示される。意外と便利。他にも隠しコマンドとか、なんか出来るんかな?
で、今回大事なのは❷の Scene のところ。ゲーム実行に使用しているシーンとオブジェクトが表示されるところね。
ゲーム中、スペースキーを押せば "sPack" シーンと "Pack" オブジェクトがここに追加表示されるハズだ。で、パックがゴールして消えて(Remove Object
して)もシーンは残ってしまっているのが見て取れると思う。実際にやってみてくれ。
つまりこれが、「シーンの元が残っている」ってことだ。目で見て分かるってイイだろ? (Default Camera ってのは何だか謎だけども・・・テヘ)
元から消す
では、元から消すにはどうすればいいか。元情報を一旦プロパティに入れて保管し、パックがゴールした時には、この元情報をもとに元を消せばいい。書くとややこしいな、コレ。
えい! スクリプトを以下のように変更だ。
❶ "nKamiGameKanri" のOn Init
に追加: これは必須じゃないけど一応、シーンルート(シーンの元)を入れるためのプロパティ "sPackRoot" を用意したことを書いておく。
プロパティは別に宣言してからじゃないと使えないって事は無いので、スクリプトのどこでもセットプロパティ出来るんだけど、スクリプトなんてちょっと見ないとどこで何やってたかなんて忘れるだろ。だから、こういうプロパティをどっかでつかうんだなーっていうのを書いて置いておく。思い出しやすいようのメモって感じかな。だから、下のScene Root
は線で繋がない。このプロパティの型(データタイプ)はこれだよっていうのを見せてるだけだから。
❷ "nKamiGameKanri" のSpawn Scene
の後に: ここでスポーンさせたシーンルート(シーンの元)をプロパティに入れる。Spawn Scene
の Root ピンからは、生み出されたシーンルート情報が出て来る。
注意なのは、コピー元の情報が出て来る訳じゃないってことだぞ。出て来るのは、コピー元をもとにして生み出されたコピーの情報な。生まれてきた子(卵)の情報。もっと簡単に言えば、コピペのペの方だ。 (spawn(発:スポーン、意:産む))
Spawn Scene
の Root とSet Property
の Value を結ぶこと。
ピンの色が青いからって、青色同士を結んじゃ駄目だぞ。Set Property
の青ピンはこのプロパティがどのオブジェクトにあるかを示す所だからな。"sPackRoot" は "nKamiGameKanri"、つまりこのスクリプトがはっ付けられている "Kami" オブジェクトにあるわけだ。だから青ピンのオブジェクト欄は空欄のままでいいってことだゾ。ピンつなぎ間違いに注意だ!
(「オブジェクト欄空欄=自分自身」ってかなり前にどっかで書いたはずだけど、どこだっけな~。みつかんねーなー。)
❸ "nPack" でRemove Object
するのは: "Kami" オブジェクトの "sPackRoot" プロパティから取って来い!
シーンルートは、Remove Object
で消せる。ここから判断すると、なんかシーンルートはオブジェクト型でイイっぽいな。
動作確認
これで、 Debug Console オンのまま、[▶ Play] してみてくれ。スペースキーでシーンが追加されるが、ゴールすると追加されたシーンごと消えるはずだ。(今回もGifは無し。)コレが正解。
(ま、本当はスポーンさせるモノって、普通いっぱいスポーンさせるから、Array にいれるんだけど、今回は出すのは1個だけだし、そもそもArray の使い方分かんないし・・・あはは、コレでいいのだ。)
敵陣側にも同じ処理を描く(書く)
自陣側で行った処理を敵陣側でもするようにすればいいよね。イベント名 "UUUU" のGate
の後にSend Event
"GOALka" を挿入すればいいってことね。ゴールの大きさ(左右)は自陣も敵陣も同じだからこれでいい。
まーこれで、どっちのゴールに入ってもパックはシーンごと上手く消えるけど(うーん。頭痛も消えてくれると嬉しいんだけど)、消えるだけじゃ駄目だよな。得点を入れなきゃいけない。
というわけで、次回は得点管理にするかな。UI表示もだな。
本日のポイント
- Debug Console でゲーム画面上に情報表示。
- ピンの色はデータタイプを表すが、いつも同じ色をつなげばいいってもんじゃない。
〇 次回、UIか得点管理か、どちらか一方か、それとも両方やるか、両方やらないか・・・。