6
2

UnityのVRアプリサンプルからVisionProアプリの開発を始める(導入編)

Last updated at Posted at 2024-08-17

はじめに

普段は業務でも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の動画を参照)
image.png

また、この記事の方法では 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]

    • Apple visionOS にチェックを入れる
      スクリーンショット 2024-08-17 3.27.33.png
  • [Project Settings] > [XR Plug-in Management] > [Plug-in Providers] > [Apple visionOS]

    • App Modeを Mixed Reality - Volume or Immersive Space に変更する
      スクリーンショット 2024-08-17 3.31.51.png
    • Hands TrackingとWorld SensingのそれぞれのUsage Descriptionに適当な理由を入力する
      image.png
  • Package ManagerからXR Handsのサンプルファイル(GesturesとHandVisualizer)をインポートする
    スクリーンショット 2024-08-17 3.37.38.png

サンプルアプリに必須コンポーネントを追加

  • XR Handsのサンプルのシーン HandGestures を複製し、別のシーン名(例:HandGesturesAVP)で保存して開く
    スクリーンショット 2024-08-17 6.06.48.png

  • Projectの Assets/Resouces フォルダ配下で右クリックメニューから [Create] > [PolySpatial] > [Volume Camera WIndow Configuration] をクリックして追加する
    スクリーンショット 2024-08-17 3.46.04.png

  • 追加したVolume Camera Window Configurationを、Inspectorから Mode を Unbounded に変更する
    (※ Bounded ではハンドトラッキングが動作しない)
    スクリーンショット 2024-08-17 3.46.24.png

  • シーンのHierarchy上で右クリックメニューから [XR] > [Setup] > [Volume Camera] をクリックして追加する
    スクリーンショット 2024-08-17 3.41.38.png

  • VolumeCameraの位置を原点位置(0,0,0)になっているか確認する

    • VolumeCameraの位置が視点の原点位置になるため、ズレると表示がおかしくなる
  • 追加したVolume Cameraを、InspectorからVolume Window Configurationに先ほど作成したものを指定する
    スクリーンショット 2024-08-17 3.42.19.png
    スクリーンショット 2024-08-17 3.47.12.png

  • シーンのHierarchy上から、右クリックメニューから [XR] > [AR Session] をクリックしてXR Originの子のGameObjectとして追加する(ARSessionとARInputManagerのコンポーネントがアタッチされる)
    スクリーンショット 2024-08-17 3.50.13.png

  • ↑と同様に、Hierarchy上から、右クリックメニューから [XR] > [Interaction Manager] をクリックしてXR Originの子のGameObjectとして追加する(XRInteractionManagerのコンポーネントがアタッチされる)
    スクリーンショット 2024-08-17 3.50.36.png

  • XROrigin配下のLeftHand、RightHandのGameObjectに割り当てられている、手のモデルのマテリアルを Universal Render Pipeline/Lit ベースのマテリアルに差し替える
    スクリーンショット 2024-08-17 3.49.35.png

  • マテリアルはシェーダーが Universal Render Pipeline/Lit になっていれば良い
    スクリーンショット 2024-08-17 10.58.27.png

作業後のHierarchyはこんな感じになっていればOK。ビルド前にSceneを保存します。
(後から気づいたのですが、VolumeCameraさえあれば、UI系のGameObjectはVolumeCameraの配下になくても動作します)
スクリーンショット 2024-08-17 10.27.25.png

VolumeCameraの配下にあるGameObjectはそれぞれ独立したUIになっています。詳細の情報が欲しい場合はAdvancedPoseDebuggerの方を有効にしても良いかもしれません。
(後に出てくるスクショはAdvancedPoseDebuggerを有効にした場合の画面になります)

UnityProjectをビルド

iOSアプリと同様に、UnityからXcodeプロジェクトへ出力するためのビルドを行います。

  • Shift + Ctrl(Command) + B を押してBuild Settingsのダイアログを表示し、プラットフォームをvisionOSに切り替える
  • Scenes in Buildに登録されているSceneをさっき作成したシーンに差し替える
  • Buildをクリックする
    スクリーンショット 2024-08-17 3.51.53.png
  • ビルド時に出力先のディレクトリを選択するダイアログが出てくるので、Projectフォルダ直下に適当なフォルダ(例: Builds)を作り、そのフォルダを選択してビルドする
    スクリーンショット 2024-08-17 10.41.19.png

今度はXCodeでアプリをビルドし、VisionProにアプリを転送します。
(事前に必要なXcode周りの設定は省略します)

  • 出力されたファイル内にXCodeプロジェクトファイル(Unity-VisionOS.xcodeproj)が生成されているので、ダブルクリックで開く
    スクリーンショット 2024-08-17 10.43.36.png

  • [Signing & Capabilities] > [Signing] のメニュー下で Automatically manage signing にチェックを入れ、 Team をApple Developer Programが有効になっているものを指定し、ビルドを実行
    スクリーンショット 2024-08-17 3.56.29.png

アプリを実行した際の実機画面

このように、XR HandsのサンプルアプリがVision Proでも動いています。

IMG_0066.PNG

終わりに

Vision Proのアプリ開発といえば、PolySpatialのサンプルアプリベースのものを使って紹介していることが多いのですが、Immersive Spaceに限定してしまえば、従来のVR開発ともシナジーがありそうです。
今後もこの方法が使えるのであれば、他のVR HMDとのクロスプラットフォーム開発も視野に入りそうです。
また、XR Interaction ToolkitベースでのサンプルアプリもVision Proで動作したので、そちらも近いうちに記事にしようと思います。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2