はじめに
こんにちは、NTTコノキュー 浅井です。
みなさんVision Pro開発してますか?
ついに日本でも発売開始が発表され、いよいよ本格的に盛り上がってくるかと思います。
NTTコノキューでは、昨年のWWWDCから細々と取り組みを進めています。
(記事も書きました)
Apple Vision Pro / visionOS 向けのアプリは、記事執筆時点(2024/06/10)では
- Xcodeでのネイティブ開発
- Unityでの開発
- Unreal Engineでの開発
の3つがありますが、今回はUnityでの開発方法についてまとめます!
Unityでの開発方法 - PolySpatial
Unityでは、visionOS向けのアプリ開発環境を「Unity PolySpatial」として提供しています。
https://docs.unity3d.com/Packages/com.unity.polyspatial.visionos@1.1/manual/index.html

PolySpatialの利用条件・要件
記事執筆時点(2024/06/10)ではUnity Pro, Unity Enterprise, またはUnity Industryのユーザーのみに提供されています。つまり無料ユーザーは利用できません。
要件としては以下です。
- Unityユーザー(Unity Pro, Unity Enterprise, またはUnity Industry)
- Unity 2022.3 LTS
- Xcode15, VisionOS SDK&シミュレーター
- macOS 14.0以降のMacBook(上記を実行出来るスペック)
MacBookの「実行出来るスペック」って結局どれが良いの?
シミュレータが動作すれば良いなら、そこまで高いものである必要はないかもしれません。 が、色々考えるとM1以上が良いのでは、と思います。
Apple公式ドキュメント上では特にM1以上などの記載はなく、 Vision ProとMacの接続要件はMac OS 14 Sonoma以上となっているくらいかと思います。
ただ、Unreal EngineではM1以上と明記されています。 そのため、「とりあえずM1以上」にするのが安全だと思います。
PolySpatialでの開発をやってみる
というわけで、準備が整いました。ではいきましょう! 手順は以下です。
なお、今回は構築が簡単なTemplateを利用します。
- PolySpatial Immersive Templateをダウンロード
- Xcode 15をインストール
- XcodeのvisionOS SDK / Simulatorをダウンロード
- Play to Deviceをセットアップ
- シミュレータの実行
- Unityアプリのビルド&Xcodeでの実行
1. PolySpatial Immersive Templateをダウンロード
Unity公式より.zipファイルをダウンロードします。
zipファイルを解凍し、Unity Hubから開きます。
https://docs.unity3d.com/Packages/com.unity.polyspatial.visionos@1.1/manual/TutorialCreateFromTemplate.html
ここで、基本的にはPolySpatialの最新バージョンを利用します。 今回は、1.1.6を使用します。

Templateなので、基本的にUnityプロジェクトとして成立されているため、このままSample Sceneを確認出来ます。 各種Sample SceneはAssets/Samples/PolySpatial/Scenes/配下に配置されています。

この時点では、Unity上でシミュレータを実行しても、トグルなどをクリックできるくらいで、Vision Pro上での表示はシミュレートできません。

それでは次に進みます。
2. Xcode 15をインストール
Apple公式より.xipファイルをダウンロードします。
.xipファイルをFinderでダブルクリックすると、インストールが開始されます。
https://developer.apple.com/download/all/
こちらも基本的には最新バージョンの利用で良いです。visionOSの場合アップデートによる変更も大きいため、適宜内容を確認しながら判断するのが良いと思います。 今回はXcode 15.3を使用します。

なお、XcodeはApp Storeからもダウンロードが可能ですが、バージョン指定やβ版の利用などもあるため、上記の公式からダウンロードする方が良いです。
https://developer.apple.com/jp/xcode/resources/

また複数のXcodeを管理するXcodesというツールもあるので、お好みで。
https://github.com/XcodesOrg/XcodesApp
3. XcodeのvisionOS SDK / Simulatorをダウンロード
1.visionOS SDK Xcode>File>New>File...よりvisionOSを選択すると、SDKが未インストールの場合Getと表示されるので、インストールできます。

※画像はiOSの場合ですが、visionOSでも同様です。
2.visionOS Simulator
Apple公式より.dmgファイルをダウンロードします。
こちらもFinderでダブルクリックでOKです。
https://developer.apple.com/download/all/

4. Play to Deviceをセットアップ
Play to Deviceとは
Unityではエディター上でシミュレーションを実行出来ますが、Vision Pro向けは非対応です。そのため、Xcode側で提供されるシミュレータと連携することで実現しています。 つまり、Unityで実行ボタンを押すと、XcodeのvisionOSシミュレータ側でUnityアプリが起動し、デバッグが捗るというものです。
これが出来ないと、毎回Unityでビルド→Xcodeプロジェクトを実行→シミュレータで動作確認となり、かなり手間なので、セットアップ必須だと言えます。
https://docs.unity3d.com/Packages/com.unity.polyspatial.visionos@1.1/manual/PlayToDevice.html
なお、Vision Pro実機があれば、実機と接続することも可能なようです。
セットアップ方法
今回は、visionOS Simulatorでのセットアップを行います。
1.まず、PlayToDeviceHost.app.zipをダウンロードします。
zipを解凍し、PlayToDeviceHost.appがFinder上にあることを確認します。
https://docs.unity3d.com/Packages/com.unity.polyspatial.visionos@1.1/manual/PlayToDevice.html#first-time-setup---visionos-simulator
2.Xcode > Open Developer Tool > Simulatorより、visionOSシミュレータを実行します。

シミュレータの実行は結構時間がかかるので、待っても起動しない場合は、一度強制終了して、再起動すると良いです。(私の環境では結構なります)
3.PlayToDeviceHost.appをvisionOSシミュレータにドラッグ&ドロップして、配置します。

シミュレータ上に配置されていることを確認して完了です。

5. シミュレータの実行
1.visionOSシミュレータ上で、PlayToDeviceHost.appを実行します。 画面上でにIPアドレスとDeviceNameを確認します。

- UnityエディターでWindow>PolySpatial>Play to Deviceをクリックします。 Play to Device画面が表示されます。

3.Unityエディター上のPlay to Device画面で、Advanced Settings>Direct Connection配下のName, Host IPへ、5-1で確認した情報を入力します。 次に、Add Deviceをクリック→Available ConnectionsのConnectの該当デバイスにチェック→Connect on PlayをEnabledに変更します。

4.Unityエディターで実行ボタンをクリックします。Unityエディターで表示されるアプリがvisionOSシミュレータ上にも表示されます。アプリの操作は基本visionOSシミュレータ側で行うことが可能となり、挙動はUnity側と連動します。

補足:なお、Xcode側でも未提供のため、ARKitを利用するアプリはシミュレータでは動作しません。Unity TemplateではMixedReality, Image Trackign, Meshingが該当します。ということで、これらを試すにはVision Pro実機が必要です。
以下の通り、ダイアログ以外何も表示されません。

6. Unityアプリのビルド&Xcodeでの実行
最後に、Xcodeでの実行まで進めます。
1.Unityでのビルド 今回はTempleteのSample Sceneをそのままビルドします。 Assets/Samples/PolySpatial/Scenes/配下のSceneを全て含めることで、ProjectLauncherから各種アプリを選択可能なTempleteのアプリをそのまま再現できます。 File>Build SettingsからBuild Settings画面を開き、Scene In Buildの枠にSceneファイルをドラッグ&ドロップします。

加えると右側に番号が振られるので、0番は必ずProjectLauncherとしてください。順番はドラッグ&ドロップで変更できるので、追加してから順序を入れ替えればOKです。

あとはBuildをクリックしてビルドを実施します。プロジェクト名は適当で。
2.Xcodeで実行ファイルを起動 Unityでビルドして生成されたファイルの中から、.xcodeprojファイルをダブルクリックします。 Xcodeでファイルが実行され"Build Succeeded"を表示されていればシミュレータ上で実行ができます。 ※Meshingなどがあるからか、Xcodeでのシミュレータでの実行はできないようです。
最後に
UnityでのApple Vision Pro / visionOS アプリの開発方法は以上です。 XRデバイスはPC/スマホと異なり2次元的な画面操作では無いため、実機でのデバッグが良いです。ですがXRデバイスは高額なので試す分には実機不要だとありがたいですし、何よりわざわざ被って行うのが手間です。 ということで、XRデバイスの開発はシミュレータ環境が必須です。
他のXRデバイスでも実機無しでシミュレートするやり方が存在し多種多様ですが、ネイティブアプリ開発環境が提供されるvisionOSの場合、Xcode側のシミュレータと連動するのは良いやり方だなと思いました。
とはいえその分開発環境は2つ分必要になるので、中々の手間です。(そういう背景を踏まえてTemplateが用意されているとは思いつつ) 今後はより手軽になっていくんでしょうか。引き続き情報収集・開発など色々進めていきたいと思います。