小嶋秀樹 | 研究室
日本語 | English
Unity VR ⁄ iOS 編

Unity 5.5 を使った iPhone アプリによって手軽に VR を満喫できます.利用するのは Google Cardboard というボール紙製の VR ゴーグルで,この中に VR アプリを入れた iPhone を格納して使います.通販なら 1000円程度で購入できますし,自作することも可能です.

【SDK のインストール】

ここではシンプルな iPhone VR アプリを例として,Unity における VR 制作の基本を学んでいきます.まずは,Google VR SDK for Unity をダウンロードしてください.Unity のインストールと基本的な使い方については,こじ研の「Unity 入門編」を参照してください.

つぎに,Unity 上で新しいプロジェクトを作成(New)します.3D を選択し,たとえば "uniVRtest1" のような名前を与えましょう.新規プロジェクトが開いたら,先ほどダウンロードした SDK を組み込みます.Assets > Import Package > Custom Package... を選択し,ダウンロードした GoogleVRForUnity.unitypackage(全項目)を Import してください.途中で API のアップデートを要求されますので,指示に従って青ボタンを押してください.

【テストとバグフィックス(Unity 5.5 の場合)】

Asset の組み込みが完了すると,Projects ウィンドウに GoogleVR と Plugins というフォルダが現れます.GoogleVR > Demos > Scenes の中にある GVRDemo をダブルクリックで読み込み,Unity ウィンドウ最上部にある再生ボタンを押して動かしてみます.

いかがでしょうか? おそらく Unity ウィンドウ下部にエラーメッセージが出ていると思います.このエラーメッセージをダブルクリックして詳細を表示し,エラー発生源である GvrVideoPlayerTexture.cs(595行目でエラー CS1622 発生)の行をダブルクリックして当該ファイルをエディタで開きます.エラー発生行(595行目)"return false;" がハイライトされているはずです.この行を "yield break;" に修正してください.(とりあえずの修正です.次の版では修正されると思われます.)

591:  private IEnumerator CallPluginAtEndOfFrames() {
592:    if (processingRunning) {
593:      Debug.LogError("CallPluginAtEndOfFrames invoked while already running.");
594:      Debug.LogError(StackTraceUtility.ExtractStackTrace());
595:      yield break;  //  return false;
596:    }
        ...

それではもう一度再生ボタンを押して GVRdemo を動かしてみてください.VR ゴーグルに表示するステレオ画面が表示され,キューブからパーティクルが放出されているのがわかります.Alt+マウス操作で,視線方向を動かしてみてください.キューブを正面に捉えると色が変わります.この状態でキューブをマウスクリックすると,キューブは消滅し,別の場所に新しいキューブが出現します.

【iPhone で動かしてみる】

このデモを iPhone 上で動かしてみます.File > Build Settings... から iOS を選び(Switch Platform し),Debug 指定のもとで,つぎのように Player Settings... を(Inspector ビューで)設定します.まず,Company Name と Product Name には適当な名前を入れます.つぎに,iPhone らしきタブを開き,以下のように設定します.(あくまで宮城大学こじ研での設定です.)

これら設定ができたら,Build ボタンを押し,Builds/uniVRtest1-ios として保存してください.保存されるのは Xcode プロジェクトのファイルツリーです.

保存が完了したら,Xcode から Builds/uniVRtest1-ios/Unity-iPhone.xcodeproj を開きます.Xcode 上で Unity-iPhone のビルド設定を開き,General タブの中で以下のように設定します.(あくまで宮城大学こじ研での設定です.)

iPhone を USB ケーブルで接続し,Xcode のターゲットをその iPhone に指定します.再生ボタン(Build & Run)を押せば,iPhone に GVRDemo アプリがインストールされ,起動するはずです.VR ゴーグルがあれば,iPhone をその中に入れて覗いてみてください.結構リアルな感じがしませんか.

ビューを Game から Scene に切り替えると,VR ゴーグルから見えていか世界を「神の視点」から俯瞰することができます.Alt+一本指ドラッグや二本指ドラッグなどで視点や視線を動かすと,床や壁や箱などが配置されているのがわかります.このように「世界」にさまざまなオブジェクトを導入し,それらを相互作用させるのが,Unity の基本的な使い方(プログラミング方法)です.

オリジナルの VR アプリをつくる

ここでは,シンプルながらオリジナルの VR アプリをつくることをとおして,Unity における VR 制作の基本を学んでいきます.

【VR プロジェクトの準備】

まずは,空のプロジェクト(3D)"uniVRtutorial1" を新規作成し,Google VR SDK for Unity を組み込みます.Assets > Import Package > Custom Package... を選択し,上で使った GoogleVRForUnity.unitypackage(全項目)を Import してください.

最初に,この空っぽのシーンを保存します.File > Save Scenes です.ここでは,uniVRtutorial1/Assets/ の下に "_Scenes" という新規フォルダを作り,その中に "SimpleVR" という名前で保存します.この状態で「再生」ボタンを押すと,上の例と同じようにエラーで止まりますので,全く同じようにバグフィックスをしてください.もう一度「再生」ボタンを押すと,何もない地平が広がっているのが見えます.

つぎに,Project ウィンドウから,GoogleVR > Prefabs > GvrViewerMain を Hierarchy ウィンドウにドラッグ&ドロップします.この状態で「再生」ボタンを押すと,こんどはステレオ画像が表示されるのがわかります.

【敷地をつくる】

この世界に,まず「敷地」を導入しましょう.Hierarchy ウィンドウの Create メニューから,3D Object > Plane を生成し,"Ground" という名前に変更します.Inspector ウィンドウで,"Ground" の中心位置 Position を (0, 0, 0) に Reset します.また,Scale を (2, 1, 2) とし,「敷地」の範囲を X 座標・Z 座標ともに −10〜+10 の範囲(面積は 20×20 = 400)に広げます.まずは

この「敷地」を緑色にします.Project ウィンドウから Create > Folder で新規フォルダを Assets の中につくり,"_Materials"(複数形)に名称変更します.この "Materials" フォルダを選択した状態で,Create > Material を選びます.フォルダの中に新規画材 "New Material" が生成されるので,これを "Ground" に名称変更します.これを選択すると,Inspector 側で設定変更ができるようになります.色は Albedo(散乱反射)で設定します.カラーピッカーで緑色を設定してください.この Material を,シーン画面中の "Ground" にドラッグ&ドロップして,Material を適用してください.

【ビルを建てる】

この緑豊かな「敷地」に,何棟かの「ビル」を建てます.Hierarchy ウィンドウから Create > Create Empty を選び,"Buildings" という名前を与えて,複数の「ビル」をまとめる親要素をつくります.Position を原点に Reset しておいてください.

つづいて,Hierarchy ウィンドウから Create > 3D Object > Cube を生成します.これを "Building1" としましょう.高さ方向のスケール(Scale Y)に 1〜4 程度を与え,その半分の値を高さ方向の位置(Position Y)とします.これで「敷地」に白い「ビル」が載っている状態となります.水平面での位置(Position X, Z)は,2〜5 程度の値を入れましょう.このような操作を "Building8" まで繰り返し,8棟の「ビル」を敷地に建ててください.高さにバリエーションをもたせ,互いに重なり合わないように配置してください.

【街の中心に立つ】

それでは「再生」ボタンを押して,この「街」に行ってみましょう.Alt+マウス操作で,視線を上下左右に動かしてみてください.どうも,この「街」を遠くから眺めているようです.足元を見ると「敷地」の境界も見えます.これは,Main Camera の初期位置が (0, 1, -10) となっているためです.シーンビューで Main Camera の位置を確認すると,たしかに「敷地」の境界付近にいることがわかります.

そこで Main Camera の位置を「街」の中心(ただし高さ Y=1)に変更します.「再生」を停止し,Hierarchy から Main Camera を選択し,Inspector でその Position を (0, 1, 0) に変更してください.シーンビューで Main Camera の位置を確認してください.再び「再生」ボタンを押し,視線をあちこちに向けて,自分が「街」の中心にいることを確認してください.

【iPhone で動かしてみる】

この "SimpleVR" を iPhone で動かします.上で実行した手順がそのまま使えますが,Bundle Identifier は別のもの(たとえば "jp.ac.myu.koziken.simpleVR")を指定した方がよいでしょう.VR ゴーグルに入れると,それなりの没入感を感じられるはずです.試してみてください.