自作ARヘッドセットを用いてシューティングゲームを作る ソフトウェア編【Project North Star】
はじめに
こんにちは。ハッピーマウンテンです。
前回ARゴーグルが完成したので、今回はゲームを作っていきます。
自分はソフト方面は全然わからない(Unityを使ったことがない)ので、簡単な説明のみになってしまいますがよろしくお願いします。
製作環境
ゲームを作るといっても、一から作るのは大変なので、今回はゲームエンジンのUnityを用います。Project North StarとRealSenseのSDKにUnityパッケージが入っているので、そちらを用います。
製作に用いた環境は以下の通りです。マシンパワーが必要と聞いたので、そこそこのものを用意しました。
GPU : NVIDIA GeForce GTX 1080 Ti
RAM : 16GB
OS : Microsoft Windows 10 Education 1903
Unity : 2018.2.21f1
LeapMotion SDK : Orion 4.0.0 + 52173
RealSense SDK : 2.19.0
準備
以下の記事を参考に、Project North StarとRealSenseのUnityパッケージをインポートします。
実はゲーム自体は友人が作ってくれていたので、これと先ほど作成したプロジェクトをくっつけるだけです(ゲームの内部処理がどうなっているかは把握していません。ごめんなさい)。ちなみにゲーム自体は制限時間内にかぼちゃをできるだけ撃つ、というシンプルなSTGとなっています。実際のゲーム画面は以下のようになっています。
このままでもPC上でマウスを用いて遊べますが、今回はこれをARで遊べるように改造します。改造に当たって以下の2点の改良と銃型コントローラの製作を行いました。
Raycastを使って当たり判定を実装する
元ゲームではマウスカーソルからRaycastを発射して当たり判定を判別しています。当初の予定ではwiiリモコン辺りを用いて照準を定めるコントローラを作ろうと思っていましたが、時間が無かったのでProject North Starを用いて照準を合わせるようにしました。額辺りから弾を発射するイメージですね。
以下のように適当なオブジェクト(今回はキューブ)を作り、unity上の視点の部分に合わせます。
ヒエラルキー上ではこうなっています。ray_CubeというのがRaycastを発射するためのオブジェクトです。RealSenseによって取得したSLAMの座標(Rs Pose Stream Transformer)はAR headset Halo...の座標に反映されるので、それより下の階層においておけば自動的にray_Cubeも追従する、というわけです。Raycastはキューブの前面中心から発射したいので、ray_Cubeの中心がAR headset Halo...のローカル座標のそれぞれ0の部分に来るようにしましょう。
あとはこのオブジェクトからRaycastを発射できるようにすればOKです。Raycastの実装については割愛します。
視界に合わせて付いてくるUIを実装する
VRでゲームをやっていた人は分かると思いますが、VRゲーム上のUIは自分の視界に合わせて追従してくるタイプのものがほとんどです。元のゲームでは時間、スコア、弾数が表示されていましたが、これに照準を追加して視界に追従するようにします。
これも先ほどのRaycastの実装と同じように行うだけです。これらのUIはすべてCanvas上にあるので、CanvasごとAR headset Halo...の下の階層に入れれば良いだけです。もちろん、照準はRaycast上に存在するように位置を調整する必要はあります。
コントローラを作る
照準自体はProject North Starを使って定めますが、発射やリロードの操作ができないので、コントローラを作ります。本当はハンドトラッキングを用いてやりたかったのですが、これも時間が無かったのでwiiリモコンを用いて作ります。
wiiザッパーでもよいのですが、なんとなくダサいので100均で購入した水鉄砲を改造してwiiリモコンを内部に組み込みました。トリガーとポンプのスライドがwiiリモコンのスイッチと連動するようになっています。構えたときに銃床の部分がゴツゴツして痛かったのでスポンジを巻きました。
wiiリモコンの入力はBluetooth接続でTouchmoteでキーボード入力に変換しています。
おわりに
これでソフトウェア部分も完成です(ARヘッドセットという性質上、実際のプレイ動画を撮るのが難しいので、撮れたら上げたいです)。実際、高専祭の展示ではそこそこの好評をいただいたので良かったのですが、問題点は多いです。
- ハンドトラッキングが生かせていない
- ヘッドセット側で照準を定めるという変な操作方法になってしまっている
- ヘッドセットが重い
- 重心が偏っている
とりあえずこれで一段落ですが、以上の改善点を踏まえ、今後もProject North Starの改良を続けると共に、Unityの勉強もやっていこうかなと思っています。
ご覧いただきありがとうございました。