VR開発メモトップ

Unity+Google Cardboard開発メモ(Daydream対応)

最終更新日:2017年01月03日

このページの記述は古くなっています。近々更新予定です。

UnityでGoogle CardboardおよびDaydream対応アプリを開発する方法やTipsをまとめています。Google Cardboardについては「Google Cardboardについて」を、Daydreamについては「Daydreamについて」を参照してください。

更新履歴

(2017年1月3日)Google VR SDK 1.10.0の問題について追記
(2017年1月2日)「Google VR SDKをインポートするとGvrVideoPlayerTexture.csでエラーが出る」を追加、Unity 5.6ベータにあわせて記述を修正
(2016年10月6日)Daydream対応テクニカルプレビューの解説を整理、Google VR SDK version 1.0にあわせて記述を修正
(2016年9月28日)UnityのDaydream対応テクニカルプレビューについて追記
(2016年8月21日)目次の追加と整理

目次


UnityでGoogle Cardboardアプリを作るには

UnityのCardboard/Daydream対応について

UnityでGoogle Cardboard/Daydreamアプリを作るには、現在2通りの方法があります。

前者はGoogle提供のプレハブやスクリプトを使用します。iPhone、Androidそれぞれに向けてGoogle CardboardおよびDaydream対応アプリを開発できます。

後者はUnityネイティブのVRサポート機能のAPIを使用します。現在はAndroidのみに対応しており、非同期リプロジェクション(タイムワープ)や端末の発熱を抑えるSustained Performance Modeなど、Daydream向けの最適化が行われています。ただし、現時点ではDaydream非対応端末でのパフォーマンスに問題があるようです。

2017年1月現在は、Daydream対応端末が国内販売されていないのと、Cardboardでの動作パフォーマンスの問題から、前者のUnity 5.5を使用する方法がおすすめだと思います。

なお、将来的には、後者のUnityのVRサポート機能を使用する方法が標準となり、Google VR SDKはモーションコントローラやGoogleのプラットフォーム専用の機能を追加で提供するようになるようです(ちょうどOculus RiftにおけるOculus Utilitiesのようなポジション)。その際、Google VR SDKのLegacyフォルダに入っているスクリプトやプレハブはなくなるようです。

以下でそれぞれビルド方法を解説します。

Unity 5.5でGoogle VR SDK for Unityを使用するには

Google VR SDK for UnityのGitHubリポジトリからGoogleVRForUnity.unitypackageをダウンロードします。

Unity 5.5で新規プロジェクトを作成し、ダウンロードしたパッケージをダブルクリックしてプロジェクトにインポートしてください。追加のパッケージを求められる場合はそれもインポートしてください。

Build SettingsでプラットフォームをiOSまたはAndroidに変更します。

端末の向きを設定

Player SettingsのResolution and PresentationのDefault Orientationを「Landscape Left」に変更します。

(Androidのみ)Bundle Identifierを設定

Player SettingsのAndroidタブで「com.Company.ProductName」となっているCompanyとProductNameを、適当な組織名とプロダクト名で書き換えます。

サンプルシーンのビルド

インポートしたパッケージのGoogleVR/DemoScenes/HeadsetDemoフォルダにサンプルシーンのDemoSceneが入っていますのでBuild And Runしてみてください。

ビルドと実機への転送・起動が行われたら、端末を横にしてCardboardの画面になれば成功です。中央下の歯車をタップしてCardboardビューアについているQRコードを読みこませると、キャリブレーションが行われます。

また、通常のアプリをGoogle Cardboardアプリにするには、GoogleVR/Prefabsフォルダに入っているGvrViewerMainプレハブをシーンにドロップします(Main Cameraは消さなくていいことに注意してください)。

エディタで再生する場合は、Altキーを押しながらマウスを動かすと視点を回転できます。


開発Tips

以下はGoogle VR SDK for Unityを使用する場合の解説になります。

ヘッドトラッキングをリセットするには

GvrViewer.Instance.Recenter() でリセットできます。

視線入力をするには

GazeInputModuleを使用します。DemoSceneが分かりやすいサンプルになっています(そのうち詳しく解説)。ReticleオブジェクトおよびGvrReticleスクリプトでレティクル(照準)が表示されています。

単眼表示にするには

GvrViewerMainオブジェクトのVR Mode Enabledをオフにします。GvrViewer.Instance.VRModeEnabled でもアクセスできます。

Daydreamのモーションコントローラーを使用するには

パッケージのGoogleVR/DemoScenes/ControllerDemoフォルダのControllerDemoシーンがDaydreamのモーションコントローラーを使うサンプルになっています。

以下にAPIの説明があります。

iOSでアンチエイリアスをかけると右画面しか映らなくなる

Quality SettingsでAnti Aliasing(MSAA)を有効にすると左画面が止まってしまう問題があります。

どうもMetalが原因のようです。Player SettingsのiOSタブのAuto Graphics APIのチェックをオフにして、Metalの項目を削除してみてください。

開発者フォーラムはないの?

Google+にCardboard & VR Developersという公式のコミュニティがありますが、あまり開発者フォーラムという雰囲気ではないです。

不具合や、不具合の疑いについては、GitHubのgvr-unity-sdkリポジトリのIssuesを参照するといいかもしれません。

Google VR SDKをインポートするとGvrVideoPlayerTexture.csでエラーが出る

Google VR SDK 1.10.0の不具合で、以下のようなエラーが出ます。

Assets/GoogleVR/Scripts/Video/GvrVideoPlayerTexture.cs(595,7): error CS1622: Cannot return a value from iterators. Use the yield return statement to return a value, or yield break to end the iteration

ダブルクリックして、「return false;」を「yield break;」に書き換えてください。


Unity 5.6ベータのVRサポート機能を使用するには

Unityベータ版プログラムからUnity 5.6をダウンロード、インストールしてください。

Build SettingsでPlatformをAndroidに変更し、Player SettingsのAndroidタブで「com.Company.ProductName」となっているCompanyとProductNameを、適当な組織名とプロダクト名で書き換えます。

さらに、Virtual Reality Supportedをチェックして、出てきたVirtual Reality SDKsで+をクリックして、「Cardboard」または「Daydream」を追加します。なお「Daydream」のみだと、Daydream対応端末(現時点ではPixelなど)でしか動作しないようです。

また、手元では「Cardboard」のSDKでGalaxy S6でパフォーマンスが出ずかなりカクつきます(要確認)。

Unity 5.6ベータでは、Unity公式のVR Samplesがそのまま動作するようですので、これをビルドしてみるのがおすすめです。アプリの進行にボタンを押す必要があるため、Bluetoothゲームパッドが必要です。

また、VRサポート有効でGoogle VR SDKをインポートして、Daydreamコントローラー等の機能を使用できるようです。


参考リンク

書いた人:こりん(@k0rin
リンク切れや間違いなどございましたらメールやTwitterでご指摘ください。
VR開発メモトップ RSS