札幌オフィスのOです。
社長の気まぐれな依頼を受けて、UnityでVRアプリをつくってみました。
まず、VRとは何ぞや・・・バーチャルリアリティの略で、以前から注目されている仮想(Virtual)現実(Reality)のことです。
注目されているとは言いながら、大掛かりなヘッドセットが必要で、なかなか一般的ではありませんでした。
しかし、Googleが Google CardBoardというものを発表して、一気に身近になりました。
https://www.google.com/get/cardboard/
CardBoardとは日本語でダンボールのこと、ダンボールVRです。
見れば一目瞭然、ダンボールでできています。
手前は組み立てたもの、奥は組み立て前のパッケージです。
これにスマホを挟んでレンズを通して立体映像を見ます。
スマホ内蔵のジャイロセンサーで、上下左右どこを見てるか検出してその方向を映し出します。
さて、以下が今回VRのゲームを作るべく、表示するまでの手順です。
タイトル「Unity で VRゲーム作成」
1.どのようにすればVR表現が可能になるか調査
Unity向けのSDKをインポートすることで画面二分割表示可能のVRカメラ等が使用可能になります。
・Dive Unity Plugin package(今回はこちらを使用しました)
https://www.durovis.com/sdk.html
・Cardboard SDK for Unity
https://developers.google.com/cardboard/unity/?hl=ja
2.ゲーム画面等はどのように作成していけばよいのか
従来の3Dゲーム作成と同じ要領で作成していくことが可能です。
Unity経験者であれば特に苦労することはないでしょう。
ゲームの作成自体は従来通り行い、カメラを差し替えるだけでVRゲームはできてしまいます。
3.VR表現の仕方について
インポートでプロジェクトに追加されたカメラと、既存のカメラを差し替えることで可能になります。
①カメラ差し替え前の様子
②既存のカメラとDive_Cameraを差し替えます
具体的にはSceneに元々あるMain_Cameraを削除し、Dive_CameraをHierarchyに追加しています。
③カメラ差し替え後のGameView
開発環境で実行すると、エディター内でマウスポインターの位置に反応してぐりぐりアングルが動きます。これが実機(ダンボールVRに端末を装着して実行)の場合はジャイロに反応する形に相当します。
※Dive Unity Plugin packageによるとDive_Cameraの導入でデフォルトでジャイロセンサーにも反応するようなことが書いてありましたが、何故か私の環境でビルドしたものは反応せず、スクリプトを作成しDive_Cameraへ適用することで解決としています。ネイティブ関係だと思いますが深く掘り進めてはいません。
以下、実際の対応内容
こちらの記述をしたスクリプトをDive_Cameraへアタッチすることで、実機でもカメラアングルの更新が行われました。
4.VRデバイスにスマートフォンをセットした状態での入力について
一番不明だった箇所です!
調べるとVRデバイスによって異なるスイッチ等が付いており、それにあった検知方法が必要のようです。
今回は手元にあったVRデバイスがスイッチを押すことで導電性を持っている布部分が画面に触れるような構造でしたので、従来通りのタッチ判定を採用しました。
同じダンボールをしようしたVRでも、磁石をスライドさせるタイプなどもありました。
これは磁石をスライドさせる前後で端末側の磁気センサーで値をチェックし、入力とみなすようです。
参考:
http://blog.livedoor.jp/abars/archives/52291562.html
5.完成!プレイ!
完成してプレイしている画面です。実際には2画面ではなく、立体に見えます。
Androidであれば、以下のURLからapkファイルをダウンロードしてプレイできます。
https://dns7.m-craft.com/sapporo/n-ohta/VR/bin/VRTraining.apk
初めての試みでしたが、特に詰まるようなこともなくスムーズに実装できました。
私は調査に時間を費やしてしまいましたが、Unityを扱える方であれば1日かからず簡易なVRアプリは作成可能かと思います。
ぜひ皆さんもトライしてみてください。