実践amazon sumerian チュートリアル ラジコン ドローン を作る VR ゲーム製作の基礎に

2019年3月14日amazon sumerianMR,sumerian,VR

我が家のVR環境であるWindows MRでは専用のVRリモコンが対応しておらず、入力どうしようか考えていたのですがamazon sumerianのチュートリアルにドローン製作があり、どうもキーボードで入力できるようなのでこれを使っていこうと思います。

キーボード入力を感知し、VRの画面内で動くドローンの作り方を学んでいきます。

ドローン製作を応用すればFPSのようなキーボード主体の入力方式でVR空間内を移動できるようになるはずです。

それでは早速作ってみます。

ドローンのassetを追加する

いつも通りImport assetsからドローンを追加します。
アマゾンのsumerianチュートリアルに含まれているアセットは全部あるので学習は簡単にできますね。
 
 
 

Rigid Bodyを追加する

次の手順はRigid bodyというのを適用させて設定させることです。
このrigid bodyというのは簡単に言えば物理演算のためのコンポーネントで、これを入れることで現実の物理的な動きを再現できるようになるもの…だと思います。
Unityにも同じような物があるのでわかりやすいですね。
 

物理的な動きというのは簡単に言えばニュートンのリンゴみたいに物が落ちたり跳ね返ったりとかそういう感じです
高校生程度の物理学の知識があれば自分で動きをプログラムする事もできると思いますが、そんな面倒な事を毎回やるのは無駄なのでRigid bodyとしてコンポーネントが用意されています。

追加するときは右のInspectionパネルからadd componentsを選択します。
下の画像のボタンです。

いろいろなコンポーネントがあります。今回はrigid bodyを選択します。

これで物理演算されるようになりました。
しかしこの時点で再生をするとドローンは床を突き抜けてどこかへ落ちて行ってしまします。

Collider を追加する

次はcolliderを追加します。
colliderとは衝突を検知するコンポーネントです。
ゲームで言えば当たり判定といったところでしょうか。Basicとかでゲーム作っていた人はここで苦労していたのではないかと思います。
 
Collider componentに関してはドローンと床の両方に適用させます。
今回の場合はView roomを使っているのでview roomとドローンに適用させます。
上のRigid body追加を参考にやってみてください。
 
その後、当たり判定の位置(大きさ)を設定します。
ドローン側は高さ(y軸)を0.2くらいにします。
 

こんな感じになります。
一方家の方は横と奥行も入れる必要があります。
最初はどのような物体も1*1*1の箱状の当たり判定が与えられますが全然あってないので必ず確認してください。
今回は
x 10 y 0.01 z 10
に設定しました。

 

これで無事ドローンが床を貫通して無限に落ちていく事がなくなったはずです。
ようやくVRゲーム?っぽくなってきた感じがありますね?

キーボードで動かせるようにする

それでは実際にドローンを動かせるように動きとキーボードを対応させていこうと思います。
今回はState Machine というコンポーネントを利用します。
これはEntityに動きを与えたりするコンポーネントのようです。
 
それではこれをドローンに追加します。
するとこんな感じになります。
 
 
Drop Behaviorに動きを入れてあげればいいようです。+を押すことで編集画面に移動します。
するとこんな感じの画面が下側に表示されます。
 
 
これを編集していきます。
まずは上向きの移動を追加しようと思います。
 
add behaviorを押す事で新しい動きを追加できます。
右側のInspector パネルでそれぞれの動きを設定していきます。
Inspector panel からAdd Actionを押します。
 
 

するとこのようなメニューが出てきます。
今回はキーボードの入力を確認するためkey upを選択します。
左側Controlsタブの中にkey upがあります。見つからない時は検索を使えばすぐ見つかるはずです。

こうして追加したあと、Inspectionパネルからキーの選択をします。
今回は上昇にスペースキーを当てようと思います。
このとき日本語入力になっているとうまくいかないので気を付けてください。

次に動きのActionを追加します。
Add Actionからphysicsタブ内のApply force on rigid bodyを選びます。

次に動き自体をどうするか決めます。

今回はY軸方向(上下)で上向きに15の加速度を与えてみようと思います。

次に新しいstateを追加します。
add stateボタンを押し、名前を付けておきます。

次はadd Actionでcontrolの中のkey downを選択し、先ほどと同じようにスペースキーを割り当てておきます。
これら二つを上の画面のように結びます。

key downの方をinitial stateに変更します。
これはInspector パネルにinitial stateへの変更ボタンがあります。
これを忘れると開始後上昇してどこかへ消えてしまします。

ここで注意したいのは動き(Apply force on rigid body)を追加するのはkey up側という事です。
普通キーが押されたらkey downが動きそうな気がしますがそうではありません。
矢印の流れで動いていく命令がそれぞれでせき止められて実行されるイメージでしょうか?
正直よくわかりませんがこの通りやれば動きます。

水平方向の動きを作っていこう

先ほどの上下方向の動きと同じ要領で作って行けばよさそうですね。
気を付けるのはkey up側にapply forceを入れる事です。
 
同時入力しないタイプの入力なら一つのbehaviorにまとめる事ができます。
このような形になります。
 
 

真ん中がkey downとなっており、initial stateになっています。
この方法だと同時入力ができないので基本的には一つのキーにつき一つbehaviorを作る形がよさそうです。

私は左右の移動と前後の移動をそれぞれにまとめました。
数値に関してはそれぞれ入れてみていい感じのに設定しました。
左右で逆に動かしたいときはマイナスの値を入れるといいです。

完成

そんなこんなで出来上がったのがこれです。

 


wasdで移動 スペースで上昇します。
一応動いている感じがしますね?

今後はこれを応用して色々やっていこうと思います。

現状ではx軸、z軸に沿った操作となっています。さらに自然な入力方法は今後探していきます。

ここまでやってみると確かにUnityに比べてかなり簡単にVRコンテンツが作れそうですね。

広告