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

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

P2.玉転がし.15「クルクル」

f:id:ore2wakaru:20190127113537p:plain

クルクル回そう。そうしよう。(On Update / Rotate Object)

1個置く

回収するものは英語では Collectible(発:コレクティブル、意:回収品) とか言うみたいだが、俺はクルクルと呼ぶことにするぞ。全部で12個置く予定だが、まずは1個。

f:id:ore2wakaru:20190127074509p:plain

 アウトライナーCollection 追加。"Kurukuru" にリネーム。いっぱいクルクルを作るからな、先に入れ物を作ったぞ。

以後ここに合わせてから(やや濃い青色ラインありの状態で)オブジェクトを Add していくと、このコレクションの中に配置される。逆に、変なところクリックしてると、変なコレクションに入っちゃうぞ。

 いつから右クリで Add 出来なくなった? まあ、いいや。Mesh > Cube を追加。

f:id:ore2wakaru:20190127075711p:plain

 Cube もリネームしとく。

 位置は奥の方、12時の位置だな。それと、後でスクリプト回転させるのだが(だからクルクルね)、格好良く見せるため、X Y を45度傾ける。

マテリアル

適当に、黄色っぽく。(無くてもいいけど・・・、追加の仕方、復習しておけば)

f:id:ore2wakaru:20190127080759p:plain

新規に追加したオブジェクトにはマテリアルが設定されていない。追加設定の仕方はココとかココ参照のこと。

クルクル用スクリプト

前回、オブジェクトとスクリプトの関連付けは、

  1. Trait(フック)を付けて、
  2. Node Tree(シート)を用意して、
  3. 連結しておく。
  4. で、最後にスクリプトを完成させる。

という順番だったが、さきにスクリプトを書いておいたって何の問題もない。今回は先にスクリプトを完成させてからオブジェクトと関連付けようと思う。

新規ノードトゥリー追加

クルクル用のスクリプトは、以前作った Player 用のモノの上に書くんじゃなくて、専用のノードトゥリーを用意する。

f:id:ore2wakaru:20190127082129p:plain

 ロジックノードエディタのヘッダ、新規ノードトゥリー追加(?)のボタンをポチッ。

 新規にノードトゥリー(NodeTree)が追加されるので、分かりやすい様に適当にリネーム。

f:id:ore2wakaru:20190127085347p:plain

これで、Armory 内に2つのノードトゥリーが確保されたことになる。上図"丸ポチ"アイコンを押すとリストを出してくれる。ちゃんと2つある。(前作ったやつに "前F" が付いてるけど、多分バグ。)

まー、やっぱり俺的には、スクリプトを書くための2枚のシート(方眼紙的な何か)がストックされてると考えるのが分かりやすいかな。

スクリプトを描く(書く?)

ヴィジュアルスクリプトだから、「描く」の方がいいかもね。

必要なノードは、先ずは以下の3つ。

  1. On Update
  2. Rotate Object
  3. Vector

順番に解説。

 On Update
f:id:ore2wakaru:20190127091026p:plain

Add > Event > On Update で追加。

このノードはオブジェクトがレンダリングされる度に呼び出され実行されるもの。画面の書き換えのタイミングで呼ばれるって事ね。例えば、使っているモニタのが垂直同期周波数 60Hz の一般的なもので、かつ、V-SYNC(垂直同期)がオンの場合なら、1秒間に60回呼び出されるって事だ。(まー、これも PC パワーによって間引かれることもあるんだろうけど)

特定の決まったタイミングで呼び出されるものは Event カテゴリに入ってる。On Update はそのひとつだな。

 Rotate Object
f:id:ore2wakaru:20190127094027p:plain

これも Add から辿ってもいいんだけど、めんどくさいので、そんな時は、 Add > Search で検索しちゃう。まー本当は、どこのカテゴリに属してるかは知ってた方がいいんだけど、そのカテにノードがいっぱい入ってると探すのがめんどいのよネ。なので、ここでは検索で持ってくる方法を覚えるぞ。えっと、Search は2つ出て来るんだが、上の方の Search な。

"rota" ぐらいでかなり絞れる。便利だ。

このノードは、名前の通りで、オブジェクトを回すもの。これ以上の説明は要らないよなー。

 Vector

これは前、出したよね。Add > Variable > Vector。Variable カテゴリにはデータを保管できる類のノードが入ってる感じだな。

ノードをつなぐ

f:id:ore2wakaru:20190127101158p:plain

上図のようにつなぐ。特に問題は無いと思うが、簡単に解説すると、描画毎に、このスクリプトがくっ付いてるオブジェクトをX軸でまわすって言う内容。

Vector ノードの X に適当な数値を入れることを忘れずに。今回 "X: 0.1" としたが、これは、X軸でクルクルさせたいって事ね。多分、単位はラジアンだと思うので、秒間60回だと、1秒で6だから、360度は2パイは6.28・・・、ってことは多分、大体1秒で1回転??? ??? わからん、てきとー。

オブジェクトとスクリプトをつなぐ

ここまで出来てもまだクルクルしないからな。意外とこの時点で「あースクリプト出来たー」、[▶ Play] ってやって、「動かねー、なんで?」となる。

そう、まだスクリプトがオブジェクトにくっ付いてない。早速くっ付けよう。まー、前やったのとほぼ同じだから。

f:id:ore2wakaru:20190127102913p:plain

f:id:ore2wakaru:20190127103347p:plain

f:id:ore2wakaru:20190127103735p:plain

はい、これでくっ付きました。[▶ Play] すればクルクルする筈です。やってみましょう。

[▶ Play]

f:id:ore2wakaru:20190127104209g:plain

あー、ここにきて Armory の面ど臭さが分かってきた。ゲームを再生しないと、確認できないな。単にオブジェクト1個の動きを確認するにも、ゲーム全体を再生しないとイケナイ。少々メンドクサイな。

それはさておき、この回転の軸は、どうもオブジェクト自身の持っている軸のようだな。グローバル軸(3Dゲーム空間が持ってる絶対軸)で回転するわけではなさそうだ。実はグローバル軸で回転させたいのだが・・・。

f:id:ore2wakaru:20190127110658p:plain

とりあえず回ったから、次回解決しよう。

本日の確認
  • On Update: 毎フレーム呼ばれる
  • Rotate Object: オブジェクトを回転させる

 次回、グローバル軸でクルクル。