見出し画像

visionOSのジェスチャー

2024年にAppleからVision Proというヘッドマウントディスプレイ(以下、HMD)が発売されます。そのVision Proに搭載されているのがvisionOSです。
ここではvisionOSで開発を行うために必要な情報をまとめていきます。

なお、書いている内容はAppleから公開されているWorld Wide Developer Conference(以下、WWDC)の動画や、Design Guidelinesに書かれている内容を参考にしています。ページの最後に参考にしたWebページのURLを貼っています。詳しく知りたい方は参考先のURLも見てみてください。

Vision Proには一般的なHMDには付属するコントローラーがありません。Bluetoothでゲームコントローラーやキーボードを接続することはできるけどあくまでもオプションになっています。何故なら、visionOSの操作は基本的には手を使うことになります。ここでは手で行う操作(ハンドトラッキング)について書いていきます。


基本ジェスチャー

iOS、iPadOSで利用できるジェスチャーはそのまま利用可能
出典:WWDC23 空間入力のためのデザイン

visionOSでもiOSやiPadOSで慣れ親しんだ、タップやドラッグ、ピンチなどの基本的なジェスチャーは利用できます。SwiftUIのオブジェクトに対するジェスチャーであれば、iOSと同様の実装方法です。iOSと違うのは、全てのジェスチャーはタッチではなく空間にある手を使ったジェスチャーになります。最初は違和感があるかもしれませんが、慣れるとどれも直感的な操作ができて迷うことはありません。

また、これらの基本ジェスチャーはSwiftUIだけではなく、RealityKitの3Dモデルに対しても適用することができます。例えばHello Worldでは、Earthという3DモデルにDragGestureを適用して掴んで回転できるようになっています。

// 一部省略
Earth().gesture(DragGesture(minimumDistance: 0.0).targetedToAnyEntity()
  .onChanged { ... } )

他にも、SwiftUIのジェスチャーにはvisionOS用に追加されたジェスチャーもあります。例えば、3Dモデルの奥行きも含めた回転を行うRotateGesture3Dや、複数タップと空間上の座標軸を取得できるSpatialTapGestureがあります。

独自ジェスチャー

ARKitを使用すればHand trackingが取得可能
出典:Meet ARKit for spatial computing

基本ジェスチャーにはない、独自のジェスチャーを追加したい場合にはARKitのHand trackingを利用します。

出典:Meet ARKit for spatial computing

Hand trackingでは、手首から指の先まで27箇所のポイントを検知することが可能です。また右左どちらの手なのかを判定して、それぞれでポイントを取得する事ができます。

例えばHappy Beamでは両手でハートの形を作ることでビームが発射されて飛んでくる雲を打つゲームが実装されています。

class HeartGestureModel: ObservableObject, @unchecked Sendable {
  ...
  func computeTransformOfUserPerformedHeartGesture() -> simd_float4x4? {
    ...
    let isHeartShapeGesture = indexFingersDistance < 0.04 && thumbsDistance < 0.04
    ...
  }
  ...
}

Hand trackingでは指の関節のポイントも取得できるのでハートに近い形を検出することも可能です。しかし、サンプルの内部実装はかなりシンプルで、両手の親指と人差し指の距離が4cm以下ならハートと判定しています。つまり、この条件を満たしていればマルでもビームが飛ぶようになっています。

注意点

独自ジェスチャーを実装する場合には次のことに注意します。

  • 基本ジェスチャーに似たジェスチャーを避ける

  • 国や人によって解釈が異なるジェスチャーを避ける

  • 説明と実行ができる簡単なジェスチャーにする

  • 無理のないジェスチャーで誰にでも繰り返すことができるジェスチャーにする

例えばOKサインも国によっては👌のジェスチャーが非常に失礼な意味を保つ場合もあるため独自ジェスチャーを実装する場合には注意する必要があります。
また、Hand trackingはARKitを利用しますが、ARKitはFull Spaceでしか利用することができません。Shared Spaceでアプリで実装している場合にはHand trackingを利用する際にFull Spaceに移行するなどの工夫をする必要があります。

まとめ

visionOSのジェスチャーはシミュレーターで確認することが非常に難しく、実装しても正しいのかどうかが分かりづらいです。特に独自ジェスチャーを実装するのはほぼ不可能なため、Apple Vision Proデベロッパラボなどに参加して実機確認することをおすすめします。

参考


この記事が気に入ったらサポートをしてみませんか?