P2.玉転がし.15「クルクル」
クルクル回そう。そうしよう。(On Update / Rotate Object)
1個置く
回収するものは英語では Collectible(発:コレクティブル、意:回収品) とか言うみたいだが、俺はクルクルと呼ぶことにするぞ。全部で12個置く予定だが、まずは1個。
❶ アウトライナーで Collection 追加。"Kurukuru" にリネーム。いっぱいクルクルを作るからな、先に入れ物を作ったぞ。
以後ここに合わせてから(やや濃い青色ラインありの状態で)オブジェクトを Add していくと、このコレクションの中に配置される。逆に、変なところクリックしてると、変なコレクションに入っちゃうぞ。
❷ いつから右クリで Add 出来なくなった? まあ、いいや。Mesh > Cube を追加。
❸ Cube もリネームしとく。
❹ 位置は奥の方、12時の位置だな。それと、後でスクリプトで回転させるのだが(だからクルクルね)、格好良く見せるため、X Y を45度傾ける。
マテリアル
適当に、黄色っぽく。(無くてもいいけど・・・、追加の仕方、復習しておけば)
新規に追加したオブジェクトにはマテリアルが設定されていない。追加設定の仕方はココとかココ参照のこと。
クルクル用スクリプト
前回、オブジェクトとスクリプトの関連付けは、
- Trait(フック)を付けて、
- Node Tree(シート)を用意して、
- 連結しておく。
- で、最後にスクリプトを完成させる。
という順番だったが、さきにスクリプトを書いておいたって何の問題もない。今回は先にスクリプトを完成させてからオブジェクトと関連付けようと思う。
新規ノードトゥリー追加
クルクル用のスクリプトは、以前作った Player 用のモノの上に書くんじゃなくて、専用のノードトゥリーを用意する。
❶ ロジックノードエディタのヘッダ、新規ノードトゥリー追加(?)のボタンをポチッ。
❷ 新規にノードトゥリー(NodeTree)が追加されるので、分かりやすい様に適当にリネーム。
これで、Armory 内に2つのノードトゥリーが確保されたことになる。上図"丸ポチ"アイコンを押すとリストを出してくれる。ちゃんと2つある。(前作ったやつに "前F" が付いてるけど、多分バグ。)
まー、やっぱり俺的には、スクリプトを書くための2枚のシート(方眼紙的な何か)がストックされてると考えるのが分かりやすいかな。
スクリプトを描く(書く?)
ヴィジュアルスクリプトだから、「描く」の方がいいかもね。
必要なノードは、先ずは以下の3つ。
- On Update
- Rotate Object
- Vector
順番に解説。
❶ On Update
Add > Event > On Update で追加。
このノードはオブジェクトがレンダリングされる度に呼び出され実行されるもの。画面の書き換えのタイミングで呼ばれるって事ね。例えば、使っているモニタのが垂直同期周波数 60Hz の一般的なもので、かつ、V-SYNC(垂直同期)がオンの場合なら、1秒間に60回呼び出されるって事だ。(まー、これも PC パワーによって間引かれることもあるんだろうけど)
特定の決まったタイミングで呼び出されるものは Event カテゴリに入ってる。On Update はそのひとつだな。
❷ Rotate Object
これも Add から辿ってもいいんだけど、めんどくさいので、そんな時は、 Add > Search で検索しちゃう。まー本当は、どこのカテゴリに属してるかは知ってた方がいいんだけど、そのカテにノードがいっぱい入ってると探すのがめんどいのよネ。なので、ここでは検索で持ってくる方法を覚えるぞ。えっと、Search は2つ出て来るんだが、上の方の Search な。
"rota" ぐらいでかなり絞れる。便利だ。
このノードは、名前の通りで、オブジェクトを回すもの。これ以上の説明は要らないよなー。
❸ Vector
これは前、出したよね。Add > Variable > Vector。Variable カテゴリにはデータを保管できる類のノードが入ってる感じだな。
ノードをつなぐ
上図のようにつなぐ。特に問題は無いと思うが、簡単に解説すると、❶描画毎に、❷このスクリプトがくっ付いてるオブジェクトを❸X軸でまわすって言う内容。
Vector ノードの X に適当な数値を入れることを忘れずに。今回 "X: 0.1" としたが、これは、X軸でクルクルさせたいって事ね。多分、単位はラジアンだと思うので、秒間60回だと、1秒で6だから、360度は2パイは6.28・・・、ってことは多分、大体1秒で1回転??? ??? わからん、てきとー。
オブジェクトとスクリプトをつなぐ
ここまで出来てもまだクルクルしないからな。意外とこの時点で「あースクリプト出来たー」、[▶ Play] ってやって、「動かねー、なんで?」となる。
そう、まだスクリプトがオブジェクトにくっ付いてない。早速くっ付けよう。まー、前やったのとほぼ同じだから。
はい、これでくっ付きました。[▶ Play] すればクルクルする筈です。やってみましょう。
[▶ Play]
あー、ここにきて Armory の面ど臭さが分かってきた。ゲームを再生しないと、確認できないな。単にオブジェクト1個の動きを確認するにも、ゲーム全体を再生しないとイケナイ。少々メンドクサイな。
それはさておき、この回転の軸は、どうもオブジェクト自身の持っている軸のようだな。グローバル軸(3Dゲーム空間が持ってる絶対軸)で回転するわけではなさそうだ。実はグローバル軸で回転させたいのだが・・・。
とりあえず回ったから、次回解決しよう。
本日の確認
- On Update: 毎フレーム呼ばれる
- Rotate Object: オブジェクトを回転させる
■ 次回、グローバル軸でクルクル。