visionOS 1 beta を雑に触ってみる
macOS 13.4 以降でないと起動しないので注意。
ところで NDA 大丈夫なんだっけ
第 4 条を参照。
要するに Apple Developer しか知り得ない情報を公開するのは NG。Apple 公式のドキュメントは一般に公開されており、問題ない。また、WWDC で開示された情報に関しても問題ない。ただし、スクリーンショットの公開は規約上、NG と思われる(まあ、すでに大勢の人が上げまくってるけど…)。
公式ドキュメント
概要
SDK リファレンス
デザインガイドライン
新規プロジェクトの作成
https://developer.apple.com/visionos/planning/#where-to-start
visionOS 特有の項目としては Initial Scene と Immersive Space とがある。
Initial Scene は Window
Volume
のどちらかを、Immersive Space は None
Mixed
Progressive
Full
のどれかを選択できる。
UI はこの時点では SwiftUI 一択っぽい。ただし、UIKit が使えないというわけではなさそう。
サンプルアプリ
(確認した限りでは)現状 4 つ公開されている。
Hello World というくらいだから必要最低限のソースコードなのかと思ったら全くそんなことはなく、これのどこが Hello World やねんってくらい分量がある。
The app shows how the Earth’s tilt creates the seasons, how objects move as they orbit the Earth, and how Earth appears from space.
本当の意味での「Hello World」アプリだった。
文字通り、ジオラマを重畳表示するアプリ。Reality Composer Pro の使用方法について学ぶのにちょうどよさそう。
ゲームアプリ。ゲームとしてはシンプルだけれど、一通りの体験フローは網羅されている。
映像再生アプリ。複数人での共有再生にも対応している。
Window と Volume
https://developer.apple.com/jp/design/human-interface-guidelines/windows#visionOS
Window は一般的な用語としての Window とほぼ同義とみてよさそう。メールや Web ブラウザなど 2D 主体のコンテンツは Window、ゲームなど 3D 主体のコンテンツは Volume と使い分ける。Window 自体に 3D コンテンツを追加することもできるが、Window の表面からはみ出たコンテンツはクリップされてしまう。Volume であれば、ユーザは任意の角度でコンテンツを見ることができる。
Shared Space と Full Space
https://developer.apple.com/videos/play/wwdc2023/10260/
複数のアプリが共有している空間を Shared Space と呼ぶ。アプリは起動後、デフォルトで Shared Space 内に配置され、他のアプリと並んで表示される。より没入感のある体験のために、アプリは専用の Full Space を開くことができる。
Shared Space がデスクトップのようなイメージだとすれば、Full Space はゲームの全画面表示のようなイメージ。
Immersion Style
https://developer.apple.com/visionos/planning/#add-a-new-dimension-to-your-interface
Full Space に移行する場合は openImmersiveSpace を呼ぶ。このとき、没入感の度合いを決めるパラメータとして Immersion Style がある。Immersion Style には mixed
progressive
full
がある。
mixed
パススルーの映像とアプリのコンテンツを重ねて表示する。
full
パススルーの映像を隠してアプリのコンテンツだけを表示する。ただし、ユーザの手元は見えているらしい。
progressive
mixed
と full
の組み合わせ。初期状態はある程度のパススルーが可能だが、デバイス上部にあるデジタルクラウンを回すことで、没入感の度合いを full
まで変更できる。
https://developer.apple.com/jp/design/human-interface-guidelines/windows#visionOS
Window に関しては、ほとんどのものは iOS アプリで SwiftUI を書くのと同じようなテンションで書ける、と思ってよさそう。
Window の背景には、基本的に Glass マテリアルが使用される。これは、周囲の物理環境によって明るさが自動で調整される。
Window のサイズや配置はユーザ側で任意に変更できる。また、ユーザとの位置関係によって Window のスケールが決まる。Window がユーザから離れると Window のスケールは自動的に大きくなり、近づくとスケールが小さくなる。ユーザの位置によらず、スケールを固定にすることもできる。