【Unity】2024年版Cardboard用プロジェクトを作る方法
概要
この記事はxRギルド Advent Calendar 2024 の記事です。他にもXR系の記事が上がりますので是非読んでみてください。
今回は古のVRデバイスGoogle Cardboardを現在のUnity6で使う方法を紹介します
Google Cardboardはスマホを専用のケースに入れることで気軽にVRが体験できます。数万円~数十万円する高価な専用デバイスを購入しなくても、VRが体験できるのでVRブーム初期は重宝されていました。一時的にGoogleが開発を止めていて、Unity用の公式プラグインが無い時期もありました。しかし、2024年12月現在開発が再開されており、日々アップデートが行われています。
環境
Unity6000.0.26f1
URP
今回作成したプロジェクトは下記においてますので、もしうまくいかない場合は参考にしてみてください
プラグインのインストール
まずSwitch PlatformしてAndroidかiOSにしておきます。
Unity6ではFile->Build ProfilesからSwitch Platformできるように変わっています
次にCardboardプラグインをインストールします
Window->Package Managerを開き
Add package from git URL
にhttps://github.com/googlevr/cardboard-xr-plugin.git
を入力してインストールします。
インストールできたらSamplesのタブからサンプルもインポートしておきましょう。
シーンの設定
Assets/Samples/Google Cardboard/<version>/Hello Cardboard/Scenes
にサンプルシーンが入っています。HelloCardboard
シーンを開いてみましょう。
このサンプルには視点操作の機能も含まれています。視点操作を有効にするために下記の操作を行います。
まず、視点操作の対象となるオブジェクトにLayerを付与します。Add Layer
を選択しLayer編集メニューを開き、新たなLayerを空いている場所に追加します。今回はInteractive
という名前にしました。
視点操作対象のオブジェクトのLayerを先ほど追加したLayerに設定します。
次にPlayer->Main Camera->CardboardReticlePointer
にアタッチされているCarboard Reticle Pointer
のReticle Interaction Layer Mask
を先ほど追加したLayerに設定します。
シーンが設定できたらBuild Profilesを開き、SceneListにHelloCardboard
シーンを設定しておきます。
Androidプロジェクトの設定
ビルドするためにProject Settingsからプロジェクトの設定をしていきます。
Player
Resolution and PresentationのDefault Orientation
を Landscape Left
またはLandscape Right
に設定します
Other Settingsの Minimum API Level
をAndroid 8.0
より高いバージョンに設定しておきます。また、Internet Access
をRequire
に設定します。なお、Scripting Backend
はIL2CPP
である必要があります。
Vulkanを使っている場合はVulkan Settingsにある Apply display rotation during rendering
のチェックを外しておきます
Application Entry Point
のGameActivity
のチェックを外しActivity
にチェックを入れます。
Publish SettingsのCustom Main Gradle Template
とCustom Gradle Properties Template
にチェックを入れます
チェックを入れるとAssets/Plugins/Android/
にファイルが生成されます。
mainTemplate.gradle
には下記を追記します
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'androidx.appcompat:appcompat:1.6.1'
+ implementation 'com.google.android.gms:play-services-vision:20.1.3'
+ implementation 'com.google.android.material:material:1.6.1'
+ implementation 'com.google.protobuf:protobuf-javalite:3.19.4'
**DEPS**}
gradleTemplate.properties
には下記の2行を追記します。
android.enableJetifier=true
android.useAndroidX=true
org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
org.gradle.parallel=true
unityStreamingAssets=**STREAMING_ASSETS**
**ADDITIONAL_PROPERTIES**
+ android.enableJetifier=true
+ android.useAndroidX=true
XR Plug-in ManagementでCardboard XR Plugin
を有効にします。
iOSプロジェクトの設定
Player
Resolution and PresentationのDefault Orientation
を Landscape Left
またはLandscape Right
に設定します
Camera Usage Descriptionに任意の文字列を入れておきます。
XR Plug-in ManagementでCardboard XR Plugin
を有効にします。
ビルド
設定ができたらビルドしてみましょう。
このダイアログが出てきたらYesで問題ありません。
ビルド出来たら実行してみましょう。正しく設定できていれば空間が表示されます。
このサンプルではオブジェクトに視点を当てたまま画面をアップすると、オブジェクトが別の場所に移動する機能が実装されています。
コンポーネント解析
インタラクションを制御するにはObjectController
を解析すると分かりやすいです。CardboardReticlePointer
からOnPointerEnter()
,OnPointerExit()
,OnPointerClick()
の各関数がSendMessage
経由で呼び出されています。
public void OnPointerEnter()
{
SetMaterial(true);
}
/// <summary>
/// This method is called by the Main Camera when it stops gazing at this GameObject.
/// </summary>
public void OnPointerExit()
{
SetMaterial(false);
}
/// <summary>
/// This method is called by the Main Camera when it is gazing at this GameObject and the screen
/// is touched.
/// </summary>
public void OnPointerClick()
{
TeleportRandomly();
}
独自のインタラクションを作りたい場合は、この作りを応用して作るといいでしょう。またVRモードと平面モードの切り替えはVrModeController
を参考にしてみてください。
おわりに
Google Cardboardプラグインを使うことで気軽にVRコンテンツを作成することができます。是非試してみてください
Discussion