【VisionPro】UnityEditor とVisionPro Simulatorをリアルタイムに接続して動作チェックする方法【Unity】

# 何ができるの？

- UnityEditor のアプリをVisionOSSimulator上で再生できる
    - UnityEditor の操作内容・	VisionOS Simulator 上の操作がリアルタイムに双方に適応される
    - Interactive デバッグ環境



UNITE2023 APAC でも紹介されていることができます
<iframe width="560" height="315" src="https://www.youtube.com/embed/eDBwSeMTY2E?si=GyapVDlC5hd3pWDh&amp;start=18298" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

# TL;DR
- バージョン一致してるか気をつけよう
- ProjectSettings は設定抜け漏れやすいので何度も確認しよう
- 基本的にはマニュアル通り

# 検証環境
ここ、めちゃくちゃ重要です！
バージョンがちょっとでも違うと動かない可能性が非常に高いです

| 項目 | Version | 補足 |
|--- |---|---|
| OS | MacOSX 13.5 | Xcode15.1beta が使える環境 + AppleSillicon 搭載Macが必要です |
| Unity | 2022.3.11f1 ~3.13f1 | 今回の検証では2022.3.112f1 を使いました | 
| Unity License | Pro/Enterprise/Industry | UNITE２０２３発表後以降 Personal/Plus ライセンスでの提供はできなくなりました (現状個人開発は厳しい) |
| PolySpatial | 0.6.3 | 基本最新版 |
| PolySpatial visionOS | 0.6.3 | 基本最新版 |
| PolySpatial XR | 0.6.3 | 基本最新版 |
| PolySpatial visionOS XR Plugin | 0.6.3 | 基本最新版 |
| PlayToDevice Host.app | 0.6.3 | 詳細は後述 |
| Xcode | 15.1beta | 今回の検証では Xcode15.1 beta 3 を使用 |

# 導入手順

基本的にはマニュアルに基づいて行います

## HW編
1. AppleSillicon 搭載Mac を購入します
    - Intel Mac はサポート対象外らしいです
    - 自分はVisionOS検証用にサブ機兼副業用Macを買い替えました(30万円の出費)

## Unity編
1. Unity2022.3.12f1 をUnityHUB経由で導入
    - VisionOS とiOS モジュールの追加が必須です
    - 基本Unity2022.3.11f1以降が必須
1. Unityのプロジェクトを新規で作成
    1. URP が必須なので３D(URP)テンプレートから作成がおすすめ
1. PackageWindowから必要なパッケージをいれます
    1. Unity Registory にあるもの
        1. ARFoundation(AR テンプレートから作ったら導入済み　）
        1. Universal RP(URP テンプレートから作ったら導入済み　）
    1. AddPackage by name で入れるもの <br> ![スクリーンショット 2023-12-06 18.58.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/d0f5a863-921d-6696-7f9a-abfac3568cc9.png)
        1. `com.unity.xr.visionos`
        1. `com.unity.polyspatial`
        1. `com.unity.polyspatial.visionos`
        1. `com.unity.polyspatial.xr`
        - このあたりは [ココ](https://docs.unity3d.com/Packages/com.unity.polyspatial.visionos@0.6/manual/TutorialCreateFromScratch.html#mixed-reality-and-shared-space) を参照
    1. PolySpatial パッケージを選択して、画面右側のSampleタブから `Play to Device Input Settings` と `Unity Polyspatial Sample` を両方Import<br>![スクリーンショット 2023-12-06 19.20.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/5d14dd7d-78b3-a5b9-f9a9-58a633347ecc.png)
 
1. ProjectSettings  で設定
    1. `ProjectSettings→Graphics→URP Global Settings` でURPアセットを登録<br>![スクリーンショット 2023-12-06 19.02.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/00514b64-0cc4-8772-5276-44e7982c4d2b.png)
        - Asset がない場合は `Assets→Create→Rendering→URP Asset` で作ってください
    1. `ProjectSettings→PolySpatial→Enable PolySpatial Runtime` にチェックをいれる<br>![スクリーンショット 2023-12-06 19.04.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/29bd6173-dcf7-91d3-5344-1b39d47a7579.png)
        - <b><font color = "red">*最重要* </font></b> これを有効にしないと動かないです
    1. `ProjectSettings→Player→Resolution and Presentation→ Run in Background` を有効化<br>![スクリーンショット 2023-12-06 19.07.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/95839936-6420-792b-f3f7-8a8896d6b440.png)
        - ここ[FAQページ](https://docs.unity3d.com/Packages/com.unity.polyspatial.visionos@0.6/manual/FAQ.html#play-to-device-host)にもある通り、VisionOSタブにはないので <b><font color = "red"> Standaloneタブ </font></b>に切り替えないと項目が表示されないので注意
    1. `ProjectSettings→Player→Splash Image→ Show Splash Screen` を無効化<br> ![スクリーンショット 2023-12-06 19.09.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/c96fcb28-5c3c-6662-9a3c-03be181366ea.png)
        - これがあると、後々Xcodeビルドに失敗する可能性があるので開発用途であれば無効化しておく
    1. `ProjectSettings→Player→OtherSettings→Rendering→Color Space` は `Linear` にする<br>![スクリーンショット 2023-12-06 19.11.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/908face3-50c9-1374-59b9-9020c3db4f40.png)
        - gamma 空間はv0.6.3時点でサポート対象外
    1. `ProjectSettings→XR Plug-in Management→Plug-in Providers →Apple　visionOS` を有効化<br>![スクリーンショット 2023-12-06 19.13.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/f9f11423-1d11-fe69-c549-1b7b334cb366.png)

    1. `ProjectSettings→XR Plug-in Management→Apple visionOS →AppMode` を `Mixed Reality` に設定<br>![スクリーンショット 2023-12-06 19.14.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/20f1ea43-5d43-0e0c-7414-3aa9c618da91.png)
        - 今回はAR/MRアプリを想定しているのでMRモード
        - VRアプリ開発者は `Virtual Reality` にしてください
1. cmd(ctrl)+shift + bキー で BuildSettings を呼び出して、visionOSにSwitchPlatformをしましょう<br>![スクリーンショット 2023-12-06 19.17.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/69e5c487-0efc-15ef-20f7-413b7cf2b593.png)

1. `Assets/Samples/PolySpatial/Scenes/BalloonGallery.unity` を開く
1. メニューバーから `Window→PolySpatial→Play to Device`  を選択<br>![スクリーンショット 2023-12-06 19.23.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/2d9dfac0-24c5-e19d-00a2-8f8cc5c2e332.png)
    1. でてきたWindow の `Coonect To Player On PlayMode` にチェック<br>![スクリーンショット 2023-12-06 19.24.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/6ed47656-21de-1efb-8438-bc67c5f04d2b.png)
    1. Player IP はXcode 側のSimulator の準備ができるまで入れないでください




## Xcode/VisionOS Simulator編
1. 公式のGoogleDriveからUnityとXcodeSimulator用接続用のアプリをDLしておく
　　　　　- [こちら](https://drive.google.com/drive/u/0/folders/1M8rkewTe2zNJYFcCgweooo2hhGxxrtSP) より落とせます
　　　　　1. `Play To Device Host.zip` を解凍しておきます
    　　　　　- 生成されるアプリは VisionOS Simulator 用アプリです
    　　　　　- ダブルクリックで起動してもすぐアプリクラッシュします
　1. Xcode 15.1betaを落としておく
    　- https://xcodereleases.com/ からのDLがおすすめです
    　- 誤ってRCやリリース版をDLしないように注意
1. Xcode 15.1beta を起動
    - 初回に vision OS とiOS 開発用モジュールのインストールが必要か聞かれるので問答無用でチェックマークを入れて導入してください
    - 導入に失敗するとvisionOS Simulator が動かないです
1. visionOS 開発モジュールが導入されたら、メニューバーより `Xcode→OpenDeveloperTool→ Simulator` を選択 <br>![スクリーンショット 2023-12-06 19.26.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/4d50a41f-00a7-b161-e6b3-f07f6810f984.png)
    - こんな感じの画面が出れば導入OK<br>![スクリーンショット 2023-12-06 19.27.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/ec2d69bd-4832-e9f2-1517-413a248172cd.png)
    1. この画面がでたら 1-1 で　解凍した `Play To Device Host.app` をSimulator Window にDrag &Drop
        - 画面に 黒丸に赤枠の正六角形のアイコンが出てきてたらOK
1. 追加したアプリを起動します
    1. スクショのように IP アドレスが表示されれば動作OKです <br>![ip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65257/714eadab-25f1-3abc-2170-d5853fc4e337.png)
        - IP はGlobal/Privateどちらでも動作します
        - 筆者の環境はPrivate IPで動作チェック
        - Global はUNITEの動画参照

# 動作確認編
1. Xcode の VisionOS Simulator 上で起動した Play To Device Host.app で表示されているIPアドレスを控える
1. UnityのPlay To Device ウィンドウの `Player IP` に先ほどのIPを入力
1. Unity を起動

これでうまくいくとUnityのGameView の画面がSimulator 上にも映ります


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">本当にUnityEditorとVision OS Simulator がリアルタイムでそれぞれ操作した内容が相互に反映される！！ <a href="https://t.co/W9JKZNX5YA">pic.twitter.com/W9JKZNX5YA</a></p>&mdash; Cova (@8bitdots) <a href="https://twitter.com/8bitdots/status/1732350111500624306?ref_src=twsrc%5Etfw">December 6, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


# おまけ

手っ取り早く確認したいよ！！！


という方は、公式が用意しているテンプレートプロジェクトをご利用ください

https://drive.google.com/drive/folders/1Oe-6bBCCmk7okbK832HWiYFbM8mV0XrZ