0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Unity】Apple Vision Pro でカメラに追従するUIの作り方【PolySpatial】

Posted at

Graffity でUnityエンジニアをしているcovaです。

今回はXRならではのUIに作り方でAppleVisionPro + Unity ではどう作るの?という部分を解説します

TL;DR

  • 基本的にはuGUIを利用
  • ImmersiveSpace の時は XRToolKit のLazyFollow を利用しよう
  • Bounded Volume の時はUI操作が不要であればBillboardを使うことでカメラの方にUIを向けることが可能

前提知識

検証環境

項目 version
Unity 6000.0.23f1
PolySpatial 2.0.4
VisionOS 2.0

VolumeApp (Bounded Volume) でのUI

大前提として VolumeApp (Bounded Volume) では Camera の情報が一切取れません。
そのためUnityのCameraを配置しても Camera.main で得られるCameraは初期位置から全く微動だにしません。

そんな条件の中で、Cameraの位置に追従してUIが常にカメラに対して正面を向くような、いわゆる Billboard 機能はPolySpatial (VisionOS側)から提供されています。

VisionOSBillboard の制約

この VisionOSBillboard コンポーネントを貼り付けるだけで自動でユーザー位置に追従してくれるのですが挙動については制約があります

  1. 特定の軸のロックができない
  2. 角度がキツくなるとuGUIの入力が正しく処理されない

特定の軸のロックができない

ゲーム開発で Billboard といえば、よくあるのは Y軸 回転のみカメラ位置に追従して、X軸, Z軸 は回転させないようにすることが多いです。
しかし、本コンポーネントは公式のリファレンスに記載の通り BlendFactor という角度制約しか制限できず、軸に対しての制限ができません。

スクリーンショット 2024-11-23 17.16.20.png
(公式リファレンスより引用)

そのためX軸回転やZ軸回転を許容したく無い場合は利用できないです。

かといって代替コンポーネントがあるわけでも無いため、ここは仕様の取捨選択が求められるタイミングになってしまいます。

角度がキツくなるとuGUI の入力が出来ない

PlayToDevice を使うとわかるのですが、Bounded な設定のときはCanvasの当たり判定ように、動的に仮想カメラを生成します
スクリーンショット 2024-11-28 20.06.47.png

このカメラを用いてCanvas の当たり判定を行うのですが、 位置が固定 でかつ 遠距離 のため、Canvasが水平に近い角度になったりすると、このCameraからのRaycast に失敗して当たり判定がうまくとれなくなるようです

ImmersiveSpace (Unbounded App) でのUI

基本的にはUnityの XR Interaction Tool Kit にある Lazy Follow を用います。

05_LazyFollow.png

ImmersiveSpace 向けの場合は XROrigin オブジェクトがいるはずなので、その配下にあるMainCamera をLazyFollow のTarget に設定すると動くようになります。

06_MainCam.png

位置追従の場合

Lazy Follow の Position Follow ModeFollow にすると、頭部位置を動かす度に Target Offsetをかけた相対位置に追従してくれます。
07_FollowPos.png

Distance やTime Until Threashold Reaches... は追従するときの距離や時間のパラメータなので、適度に邪魔にならない程度に設定すると良いです。

方向(回転)追従の場合

回転にも追従させる場合は RotationFollowModeNone 以外に設定します。

08_FollowRot.png

Mode 説明
Look At Quatertion.LookAt(target) と同じ挙動で、常にTargetの方を向きます
Look At With World Up Y軸回転のみ追従するLookAt です。 X軸, Z軸回転は固定です
Follow ターゲットと同じRotationをスムーズに維持します。

一般的なBillboardを実現するには Look At With World Up を使っておけば、角度によってはUIが見えないといった事象を防ぎやすいのでおすすめです.

まとめ

  • VisionOS は通常はプライバシー保護の観点からカメラの位置をDeveloper には通知しません
  • Billboard 的なUIを作るにはアプリのモードによってコンポーネントの使い分けが必要です。
    • Bounded App : VisionOSBillboard
    • Unbounded App : Lazy Follow
0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?