まずはじめにBlenderとArmory3Dとは
Blenderは言わずと知れた3DCGソフトウェア。無料で使える。2.8でかなりの変更点があった。Armory3DはBlender2.8系列でaddonとして動作するゲームエンジンである。
インストール
非公式なQiita記事は無視して常に公式情報を見てください。
https://www.blender.org/
https://armory3d.org/
なお、以下の記述におけるarmoryのバージョンは2019-09である。
チュートリアルについて
はい、ここがArmory3Dの最大の問題点である。はっきり言ってあれ読んだだけで何か作れるとは思えない。
実際に実験しつつ探索した結果を以下に残すものである。
公式のチュートリアルにTank Tutorialというものがある。
このチュートリアルではキーボードやゲームパッド入力を受け取り、戦車の移動や弾丸の発射を制御する方法についてnode treeで記述することになる。
nodeに記述した内容が反映されない?
TankTreeについて解説しているあたりの記述であるが、ここではキーボードやゲームパッド入力を用いたeventの発行を別のtreeで行い、こちらでeventを受け取って戦車の挙動を記述することになる。
ここでチュートリアルのとおりにやったところ、TankTreeの中に記述した最初の一個目の挙動しか正常に動作しないことが判明した。複数の挙動、すなわち左旋回と右旋回と前進と後退を一個のTreeに書くとその全てが生成されたスクリプトの中に含まれず、左旋回しかないことまで確認した。
これを回避するため、わざわざtreeを分けて一個ずつ挙動を記述するようにしたところ所望の動作になった。
ちなみに、RunのとなりにCleanというボタンがあり、これを押すと生成されたスクリプトを全消しできる。
で、ここで色々試してみた結果、ひょっとしたらこのnode treeはnodeがつながっている一個のtreeだけが有効になっていて、つながっていない独立したtreeが複数は有効にならないのではないか?という仮説を立ててみたが、入力を受け取る方ではチュートリアルの画像を見ても複数の独立したtreeで受け取っているようだし実際手元で試しても動いている。結局問題の原因は特定できていない。
そもそもnodeでやってるときはデバッグどうすればいいの?
全然わからん。
これは本気でどうなってるのか知りたい。前述の問題のデバッグにしても実験的に得るよりはきちんとeventが飛んでて受け取り側が受け取ったかどうか、そこさえ調べられるなら直ちに解決する問題である。
Haxeのチュートリアルはどこ?
そんなことよりコードを書かせろとみんな思うはずだ。具体的にはHaxeでコードが書けるのだからそのチュートリアルを書いてくれと。
だがここにちょっと書いてあるだけである。いやわかんないよこれだけじゃ。
一応以下のプロジェクトがサンプルではある。ただし解説は一切ない。
わかったことの要約だけ記す(全部書こうとすると別記事になってしまいそうなので)と、
-
notifyOnUpdate
という関数でupdateごとに走る内容を決めることができる。 - objectという変数で自分が割り当てられているオブジェクトにアクセスできる。
- キーボードの状態を取得するには
iron.system.Input.getKeyboard();
- 同様にゲームパッドの状態を取得するには
iron.system.Input.getGamepad(0);
-
object.getTrait(TankTrait);
という関数で、自分に割り当てられているTankTraitにアクセスできる。
Haxeでコードを書こうと思ったらエディタが開かない
さっきのgetting startedのところでKodeがひらきますよ、と書いてあるが、実際には開かない。
preferenceの下、addonのRender:ArmoryのShow Advancedを開いてみると、Code EditorがVS CodeとなっていてVS Code Pathが空になっている。
つまり、自分で別途入れておけということではないだろうか?
なお、Win10だとここにvscodeのパスを通しても結局ウィザードが開く。