😸

visionOS 2の新機能:volumeWorldAlignmentで実現する最適なボリューム配置

2025/03/22に公開

はじめに

visionOS 2.0で新機能が増え、visionOS向けアプリの開発がしやすくなりました。この記事では、その中でも今回私が使用した機能の一つであるvolumeWorldAlignmentモディファイアについて私個人の理解促進も含めてまとめてみようと思います。

空間内でのボリュームの配置方法を制御する重要な機能です。この記事では、この機能の実用的な使い方と、実際のアプリケーション開発における活用方法について解説します。

ボリュームアライメントとは

visionOS 2では、ボリュームがユーザの方向を向くように傾けることができるようになりました。これにより、座っている時や横になっている時でも、ボリュームを快適に操作できるようになります。

しかし、アプリケーションの性質によっては、ボリュームを常に床と平行に保ちたい場合もあります。例えば、床に平行に配置するゲームボードや、空間内に固定したい3Dモデルなどがその例です。

使い方

volumeWorldAlignmentモディファイアは、Sceneに適用することで、ボリュームの空間内での配置方法を指定できます。

実装例

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .windowStyle(.volumetric)
        .volumeWorldAlignment(.gravityAligned)
    }
}

指定できる値

  • .automatic(デフォルト):ボリュームが傾き、ユーザから見て正面が完全に見えるようになります。
    • わかりづらいですが、以下の写真のように球体の軸線が傾いています。(写真の左下にユーザがいます)
  • .gravityAligned:ボリュームが常に重力方向(床と平行)に配置されます。これはvisionOS 1の動作に近いものです。
    • わかりづらいですが、球体の軸線が地面と平行で傾いていないです。

どちらを使用すべきか?

どのアライメント方式を選ぶべきかは、アプリケーションの性質によって異なります:

.automaticが適しているケース

  • ユーザが様々な姿勢(座る、横になるなど)でアプリを使用する可能性がある
  • コンテンツが常にユーザの方向を向いている必要がある(情報表示、メディア再生など)
  • ユーザとのインタラクションが主な目的である

.gravityAlignedが適しているケース

  • 床に平行に配置するタイプのコンテンツ(ボードゲーム、建築モデルなど)
  • 空間内での位置関係が重要なコンテンツ
  • 現実世界の物理法則に従うべきオブジェクト

まとめ

visionOS 2のvolumeWorldAlignmentモディファイアは、ボリュームの空間内での配置方法を柔軟に制御できる強力な機能です。アプリケーションの性質や目的に応じて適切なアライメント方式を選択することで、より自然で使いやすいユーザ体験を提供できます。

4年ほどエンジニアをしていたにも関わらず初めての投稿だったので、お試しで簡単な機能について記事にしてみましたが、これからも投稿を続けていきたいですね。

参考資料

GitHubで編集を提案

Discussion