俺に解るように説明する "Armory Engine" 入門+

ゲームエンジン Armory Engine (Armory3D) の使い方を手探りで学んで入門しようって感じかな。

P5.エアホッケー.06「スポーンさせたシーンを綺麗に消す方法」

f:id:ore2wakaru:20190511134107p:plain

前回最後の所で言った、「シーンを元から消す」って言うのがどういうことか、具体的に確認する。屁理屈なんか要らないんだ。目で見て分かるようにするぜ。カモン Debug Console

デバッグコンソール(Debug Console)で視覚的に確認

まずは、プロパティエディタ > Render タブ > Armory Project > Flags の中の Debug Console にチェックだ!

f:id:ore2wakaru:20190511114538p:plain

ここにチェックを入れてゲームを開始すると下図のように、画面の右上に4つのタブが表示されるようになる。これで色んな情報が見れるようになるわけだ。

f:id:ore2wakaru:20190511114937p:plain

 空のタブ: 情報を非表示にしたい時、ココクリック。

 Scene: アクティブなシーン(?)名と、それ中に入ってるオブジェクトが表示される。使ってないシーンは表示されない。オブジェクト名をクリックすると、下の Properties に Transform 情報が出るみたいだな。

f:id:ore2wakaru:20190511115843p:plain

 delta 秒が表示されてるとこ: ゲームパフォーマンスなんかが見れる感じ?

f:id:ore2wakaru:20190511120153p:plain

 Console: Printノードで情報出力したものがここ表示される。意外と便利。他にも隠しコマンドとか、なんか出来るんかな? 

f:id:ore2wakaru:20190511120415p:plain

で、今回大事なのはScene のところ。ゲーム実行に使用しているシーンとオブジェクトが表示されるところね。

ゲーム中、スペースキーを押せば "sPack" シーンと "Pack" オブジェクトがここに追加表示されるハズだ。で、パックがゴールして消えて(Remove Objectして)もシーンは残ってしまっているのが見て取れると思う。実際にやってみてくれ。

f:id:ore2wakaru:20190511121056p:plain

つまりこれが、「シーンの元が残っている」ってことだ。目で見て分かるってイイだろ? (Default Camera ってのは何だか謎だけども・・・テヘ)

元から消す

では、元から消すにはどうすればいいか。元情報を一旦プロパティに入れて保管し、パックがゴールした時には、この元情報もとを消せばいい。書くとややこしいな、コレ。

えい! スクリプトを以下のように変更だ。

f:id:ore2wakaru:20190511123134p:plain

 "nKamiGameKanri"On Initに追加: これは必須じゃないけど一応、シーンルート(シーンの元)を入れるためのプロパティ "sPackRoot" を用意したことを書いておく。

プロパティは別に宣言してからじゃないと使えないって事は無いので、スクリプトのどこでもセットプロパティ出来るんだけど、スクリプトなんてちょっと見ないとどこで何やってたかなんて忘れるだろ。だから、こういうプロパティをどっかでつかうんだなーっていうのを書いて置いておく。思い出しやすいようのメモって感じかな。だから、下のScene Rootは線で繋がない。このプロパティの(データタイプ)はこれだよっていうのを見せてるだけだから。

f:id:ore2wakaru:20190511124903p:plain

 "nKamiGameKanri"Spawn Sceneの後に: ここでスポーンさせたシーンルート(シーンの元)をプロパティに入れる。Spawn SceneRoot ピンからは、生み出されたシーンルート情報が出て来る。

注意なのは、コピー元の情報が出て来る訳じゃないってことだぞ。出て来るのは、コピー元をもとにして生み出されたコピーの情報な。生まれてきた子()の情報。もっと簡単に言えば、コピペのの方だ。 (spawn(発:スポーン、意:産む))

Spawn SceneRootSet PropertyValue を結ぶこと。

ピンの色が青いからって、青色同士を結んじゃ駄目だぞ。Set Propertyの青ピンはこのプロパティがどのオブジェクトにあるかを示す所だからな。"sPackRoot""nKamiGameKanri"、つまりこのスクリプトがはっ付けられている "Kami" オブジェクトにあるわけだ。だから青ピンのオブジェクト欄は空欄のままでいいってことだゾ。ピンつなぎ間違いに注意だ!

(「オブジェクト欄空欄=自分自身」ってかなり前にどっかで書いたはずだけど、どこだっけな~。みつかんねーなー。)

f:id:ore2wakaru:20190511131209p:plain

 "nPack"Remove Objectするのは: "Kami" オブジェクトの "sPackRoot" プロパティから取って来い!

シーンルートは、Remove Objectで消せる。ここから判断すると、なんかシーンルートはオブジェクトでイイっぽいな。

動作確認

これで、 Debug Console オンのまま、[▶ Play] してみてくれ。スペースキーでシーンが追加されるが、ゴールすると追加されたシーンごと消えるはずだ。(今回もGifは無し。)コレが正解。

(ま、本当はスポーンさせるモノって、普通いっぱいスポーンさせるから、Array にいれるんだけど、今回は出すのは1個だけだし、そもそもArray の使い方分かんないし・・・あはは、コレでいいのだ。)

敵陣側にも同じ処理を描く(書く)

自陣側で行った処理を敵陣側でもするようにすればいいよね。イベント名 "UUUU"Gateの後にSend Event "GOALka" を挿入すればいいってことね。ゴールの大きさ(左右)は自陣も敵陣も同じだからこれでいい。

f:id:ore2wakaru:20190511133345p:plain

まーこれで、どっちのゴールに入ってもパックはシーンごと上手く消えるけど(うーん。頭痛も消えてくれると嬉しいんだけど)、消えるだけじゃ駄目だよな。得点を入れなきゃいけない。

というわけで、次回は得点管理にするかな。UI表示もだな。

本日のポイント
  • Debug Console でゲーム画面上に情報表示。
  • ピンの色はデータタイプを表すが、いつも同じ色をつなげばいいってもんじゃない。

 次回、UIか得点管理か、どちらか一方か、それとも両方やるか、両方やらないか・・・。