はじめに
普段は業務でもApple Vision Proの開発をしているのですが、最近(2024年8月現在)はあまり個人開発でVR関連の知見が得られていなかっため、基礎的なノウハウをこの機会に学ぶため、基本的なXR関連のフレームワークを触っていました。
その結果として、一定の条件を満たせば、UnityのPolySpatialのサンプルベースでなくとも、従来のVRアプリ開発のスタイルに近い方法でVision Proのアプリの開発ができそう、ということがわかりました。
本記事では、従来のVRアプリを開発する際のサンプルに少し変更を加えて、VisionPro実機で動作させる内容をとりあげます。
PolySpatialの利用はUnity Proのライセンスが必要になります。
PolySpatial 1.3.1前後での動作確認のため、将来的にこの記事の方法では動かなくなる可能性があります。
前提条件について
本記事はVisionProのImmersive Spaceモードを前提としたアプリ開発を前提としており、WindowやVolumeモードに対応した開発は考慮していません。(Window、Volume、Immersive SpaceについてはWWDC2024の動画を参照)
また、この記事の方法では Play To Device
の動作確認はできていません。
動作確認したUnityバージョンやパッケージなど
本記事で利用したUnityEditorのバージョンや、プロジェクトで使用したパッケージの内容を以下に記述します。
Unityプロジェクトバージョン
- 2022.3.42f1
プロジェクトのデフォルトでインストールされるパッケージ(テンプレートはUniversal 3D)
- Core RP Library 14.0.11(com.unity.render-pipelines.core)
- Shader Graph 14.0.11(com.unity.shadergraph)
自分でインストールするパッケージ
- XR Plugin Management (com.unity.xr.management) 4.5.0
- XR Interaction Toolkit (com.unity.xr.interaction.toolkit) 3.0.5 ※今後の記事で利用する予定
- XR Hands (com.unity.xr.hands) 1.4.1
- Apple visionOS XR Plugin (com.unity.xr.visionos) 1.3.1
- PolySpatial (com.unity.polyspatial) 1.3.1
- PolySpatial XR (com.unity.polyspatial.xr) 1.3.1
- PolySpatial visionOS (com.unity.polyspatial.visionos) 1.3.1
依存関係で自動的にインストールされるパッケージ(開発に関連するパッケージのみ抜粋)
- AR Foundation (com.unity.xr.arfoundation) 5.1.5
- Input System (com.unity.inputsystem) 1.8.1
- Newtonsoft Json (com.unity.nuget.newtonsoft-json) 3.2.1
プロジェクトのセットアップ
上記依存するパッケージをインストールした状態から、箇条書きで説明します。
-
[Project Settings] > [XR Plug-in Management] > [Plug-in Providers]
-
[Project Settings] > [XR Plug-in Management] > [Plug-in Providers] > [Apple visionOS]
-
Package ManagerからXR Handsのサンプルファイル(GesturesとHandVisualizer)をインポートする
サンプルアプリに必須コンポーネントを追加
-
XR Handsのサンプルのシーン
HandGestures
を複製し、別のシーン名(例:HandGesturesAVP
)で保存して開く
-
Projectの
Assets/Resouces
フォルダ配下で右クリックメニューから [Create] > [PolySpatial] > [Volume Camera WIndow Configuration] をクリックして追加する
-
追加したVolume Camera Window Configurationを、Inspectorから Mode を
Unbounded
に変更する
(※Bounded
ではハンドトラッキングが動作しない)
-
シーンのHierarchy上で右クリックメニューから [XR] > [Setup] > [Volume Camera] をクリックして追加する
-
VolumeCameraの位置を原点位置(0,0,0)になっているか確認する
- VolumeCameraの位置が視点の原点位置になるため、ズレると表示がおかしくなる
-
追加したVolume Cameraを、InspectorからVolume Window Configurationに先ほど作成したものを指定する
-
シーンのHierarchy上から、右クリックメニューから [XR] > [AR Session] をクリックしてXR Originの子のGameObjectとして追加する(ARSessionとARInputManagerのコンポーネントがアタッチされる)
-
↑と同様に、Hierarchy上から、右クリックメニューから [XR] > [Interaction Manager] をクリックしてXR Originの子のGameObjectとして追加する(XRInteractionManagerのコンポーネントがアタッチされる)
-
XROrigin配下のLeftHand、RightHandのGameObjectに割り当てられている、手のモデルのマテリアルを
Universal Render Pipeline/Lit
ベースのマテリアルに差し替える
作業後のHierarchyはこんな感じになっていればOK。ビルド前にSceneを保存します。
(後から気づいたのですが、VolumeCameraさえあれば、UI系のGameObjectはVolumeCameraの配下になくても動作します)
VolumeCameraの配下にあるGameObjectはそれぞれ独立したUIになっています。詳細の情報が欲しい場合はAdvancedPoseDebuggerの方を有効にしても良いかもしれません。
(後に出てくるスクショはAdvancedPoseDebuggerを有効にした場合の画面になります)
UnityProjectをビルド
iOSアプリと同様に、UnityからXcodeプロジェクトへ出力するためのビルドを行います。
- Shift + Ctrl(Command) + B を押してBuild Settingsのダイアログを表示し、プラットフォームをvisionOSに切り替える
- Scenes in Buildに登録されているSceneをさっき作成したシーンに差し替える
- Buildをクリックする
- ビルド時に出力先のディレクトリを選択するダイアログが出てくるので、Projectフォルダ直下に適当なフォルダ(例:
Builds
)を作り、そのフォルダを選択してビルドする
今度はXCodeでアプリをビルドし、VisionProにアプリを転送します。
(事前に必要なXcode周りの設定は省略します)
-
出力されたファイル内にXCodeプロジェクトファイル(Unity-VisionOS.xcodeproj)が生成されているので、ダブルクリックで開く
-
[Signing & Capabilities] > [Signing] のメニュー下で
Automatically manage signing
にチェックを入れ、Team
をApple Developer Programが有効になっているものを指定し、ビルドを実行
アプリを実行した際の実機画面
このように、XR HandsのサンプルアプリがVision Proでも動いています。
終わりに
Vision Proのアプリ開発といえば、PolySpatialのサンプルアプリベースのものを使って紹介していることが多いのですが、Immersive Spaceに限定してしまえば、従来のVR開発ともシナジーがありそうです。
今後もこの方法が使えるのであれば、他のVR HMDとのクロスプラットフォーム開発も視野に入りそうです。
また、XR Interaction ToolkitベースでのサンプルアプリもVision Proで動作したので、そちらも近いうちに記事にしようと思います。