View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

その他のビデオ

  • 概要
  • トランスクリプト
  • コード
  • visionOSでの空間アクセサリ入力の詳細

    空間アクセサリをアプリに統合する方法を学びましょう。バーチャルコンテンツの表示、アプリの操作、空間内でのトラッキング、インタラクションに関する情報の取得により、visionOSでのバーチャル体験を向上させることができます。

    関連する章

    • 0:00 - スタート
    • 2:41 - 彫刻アプリの構築
    • 13:37 - ARKitによるアクセサリのトラッキング
    • 14:45 - デザインに関する考慮事項

    リソース

    • Tracking a handheld accessory as a virtual sculpting tool
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC25

    • RealityKitの新機能

    WWDC24

    • ARKitを活用したより高度な空間コンピューティング体験の創出
    • RealityKitによる空間描画アプリの構築

    WWDC21

    • バーチャルゲームコントローラと物理ゲームコントローラの活用

    WWDC20

    • ゲームコントローラの進歩
  • このビデオを検索

    こんにちは RealityKitチームのエンジニアの Amanda Hanです このセッションでは 新しい空間アクセサリのサポートを使用して visionOS向けの空間彫刻アプリを 作成する方法を説明します visionOSでは 視線と手による入力の 強力なパラダイムが採用されています 視線と手だけで Apple Vision Proをスムーズに操作できます 皆さんが Vision Proで より広範な体験を構築できるように 細かい制御、触覚フィードバック、 ボタン入力のためのツールも提供しています 今年 これらのツールに 空間アクセサリのサポートが加わります 2つの空間アクセサリがサポートされます PlayStation VR2 Senseコントローラと Logitech Museです

    PS VR2 Senseは ゲームに最適なコントローラです ボタン、ジョイスティック、トリガが 搭載されています タップなどの標準的なジェスチャで システムを操作することもできます

    空間でのトラッキング精度が高いため Resolution Gamesの「Pickle Pro」のような スポーツゲームも楽しめます

    もう1つはLogitech Museです Logitech Museには感圧センサーがあり 先端とサイドボタンによる可変入力と 効果的な触覚フィードバックに 対応しています

    精度が高く 仕事効率化アプリにも クリエイティブ分野のアプリにも最適です これは このセッションで構築する 彫刻アプリで制作した作品例です 横に写真アプリを開いています 先述のアクセサリは フルスペースアプリと 共有スペースアプリで使用できます 空間アクセサリの 位置と回転のトラッキングに使用するのは Apple Vision Proのカメラと 空間アクセサリのセンサーの組み合わせです 触覚フィードバックを使用すれば アプリのイマーシブ感を 高めることができます 空間アクセサリへの接続には Game Controllerフレームワークを使います RealityKitやARKitを使用して アンカーデータにアクセスできます このセッションでは 空間アクセサリによる 入力を アプリで使用する方法を解説します Game Controllerフレームワーク、 RealityKit、ARKitを組み合わせて使用し 彫刻アプリを構築します ARKitを使用して空間アクセサリを 直接トラッキングする方法を紹介します デザイン上の考慮事項についても説明します

    では 彫刻アプリの作成を始めましょう まず Xcodeプロジェクトをセットアップし

    Game Controllerフレームワークで 空間アクセサリに接続します 彫刻ツールをバーチャルで表示します アプリを操作して バーチャルの粘土を彫ります インタラクションデータのトラッキングに 応答するツールバーを表示して完成です まずは Xcodeのセットアップです

    Game Controllerフレームワークで アクセサリとの接続を管理します Xcodeの機能エディタを使用して 空間ゲームコントローラのサポートを plistに追加します ゲームコントローラで 空間アクセサリのトラッキングを サポートすることを示すために にチェックを入れます

    アプリのplistのフィールドに アクセサリの用途の説明を記入します

    この彫刻アプリでは 「アクセサリの動きをトラッキングして バーチャル粘土を彫る」という内容にします この説明はユーザーにポップアップ表示され トラッキングの目的を伝えます

    次はアクセサリをトラッキングします 空間アクセサリでは 慣性センサーデータを送信するために 有効な接続が確立されている必要があるため その接続の検出は 彫刻ツールの構築プロセスでは必須です

    空間アクセサリへの接続の検出には Game Controllerフレームワークを使用します 接続および切断のイベントをリッスンするか 現在の接続を反復処理します ゲームコントローラの詳細については 「Tap into virtual and physical game controllers」をご覧ください 空間アクセサリトラッキングをサポートする Game Controllerのクラスは2つあります GCControllerとGCStylusです これらはそれぞれ コントローラとスタイラスペンに対応します 両方とも GCDeviceプロトコルに準拠しています

    空間アクセサリのトラッキングに非対応の コントローラやスタイラスペンもあります 彫刻アプリでそれを調べる方法を紹介します アプリ起動時に デジタル彫刻ツールが アクセサリに未接続の可能性があります そのため アクセサリへの接続タイミングを リッスンする必要があります スタイラスペンの場合は GCStylusDidConnectの通知をリッスンし GCStylusを取得します GCStylusが空間アクセサリのトラッキングを サポートするかどうか調べるには productCategoryが SpatialStylusであることを確認します アクセサリは アプリの使用中に 切断される可能性もあるので 切断イベントも同様に実装します GCController APIを使用する場合は GCStylusをGCControllerに置き換えて GCControllerのproductCategoryが SpatialControllerであることを確認します 接続を設定できましたが アクセサリにはまだ何も表示されません バーチャルの先端を表示しましょう visionOSでは 空間内での オブジェクトの位置と方向のトラッキングに アンカーを使用します 使用するのが RealityKitとARKitのいずれかでも またはそれらの組み合わせでも アクセサリへのアンカーは フルスペースと 共有スペースの両方のアプリで利用できます 彫刻アプリでは共有スペースを使用しますが これは 彫刻の際に参照する画像を Safariや写真など 他のアプリで 呼び出せると便利であるためです プライバシー保護のため アクセサリの 動きをトラッキングできるのは 認証済みの 現在フォーカスされているアプリのみです

    各アクセサリには アンカーの位置を示す 一連の固有のラベルが付与されます PS VR 2 Senseコントローラには照準、 グリップ、グリップ面のラベルがあります Logitech Museには グリップの位置のラベルはなく 照準の位置のラベルのみ付与されます 彫刻アプリでは 各空間アクセサリの 照準にアンカーします RealityKitのAnchorEntityで アクセサリに バーチャルコンテンツをアンカーします AnchorEntityは バーチャルコンテンツを 実世界に固定するためのエンティティであり RealityKitシーンの 他の要素とやり取りできます アンカーの使用が コードではどのようになるか見てみましょう AccessoryAnchoringSourceを 空間アクセサリから作成します

    アクセサリのaimの位置を ターゲットにします アクセサリがこの位置をサポートしない場合 アンカーは適用しません

    accessoryをターゲットにして AnchorEntityを作成します locationは先ほどのaim trackingModeはpredictedです

    左側にAnchorEntityを作成しました predictedのトラッキングモードでは 高度なモデルを使用して コンテンツのレンダリング時の アクセサリの位置を予測します ただし 急な動きがあると オーバーシュートが生じる場合があります 画面のフレーム4では 紫色の予測フレームが 灰色の実際の位置と一致していません このモードはレンダリングや 低遅延が 求められるインタラクションに使うべきです 高精度が必要な場合は continuousモードを使用します 遅延は大きいですが ポーズの精度が高く オーバーシュートが発生しません この例のアクセサリでは 応答性を最大化するために トラッキングモードはpredictedにします 彫刻アプリでは ツールを使う手が 急な動きをすることは想定されません これで アクセサリに バーチャルの先端をアンカーできました 問題なさそうですが この彫刻ツールは アプリの他の要素とやり取りできません アクセサリの位置に合わせて 粘土を彫れるようにするとともに 触覚フィードバックを実装しましょう バーチャル粘土に彫るには 彫刻ツールの transformを取得する必要があります 昨年追加されたSpatialTrackingSessionを 使用して 構成済みのターゲットのAnchorEntity型の transformを取得できます 今年新たに SpatialTrackingSession.Configurationの サポート対象に.accessoryが追加されました SpatialTrackingのConfigurationに .accessoryを追加すると アクセサリのAnchorEntityのtransformを 取得するセッションが実行可能になります 「Build a spatial drawing app with RealityKit」で Adrianによる SpatialTrackingSessionについての 詳しい説明をご覧ください 次は 彫刻の際に 触覚を感じられるようにしましょう 空間アクセサリに触覚を付与すれば 優れたフィードバックメカニズムとなります 粘土を扱っている感じを出せるように 彫刻アプリに触覚を追加します アクセサリからhapticsを取得し hapticsEngineを作成して起動します

    触覚パターンの設定などの 触覚の詳細については 「Advancements in Game Controllers」を ご覧ください この彫刻ツールを使って 粘土を彫るところを見てみましょう アクセサリを粘土上で動かすと 素材が取り除かれ 触覚が再現されて イマーシブ体験が得られます でもご覧のように 作品から素材を 削りすぎることもあるでしょう そこで 付加彫刻モードも用意しましょう ユーザーとアクセサリの インタラクションに基づいて表示される 彫刻モードを切り替えるための ツールバーをお見せします このツールバーは アクセサリを どちらの手で持っているかに応じて アクセサリの左か右に表示されます ARKitのAccessoryAnchorを使用します ARKitのAccessoryAnchorには 次の4つのプロパティがあります アクセサリを持つ手を示すhandedness、 空間内におけるアクセサリの相対的な動き、 空間内における相対的な回転運動、 トラッキングの状態です センサーやカメラのカバー範囲が狭くなると トラッキングの質が低下します

    空間アクセサリを使用して実世界の測定を 行うなどの 特定のユースケース向けに ARKitでは メトリックスアンカーのtransformを 受け取るためのAPIも提供しています 詳細については ドキュメントの Coordinate spaces APIの 説明をご覧ください サンプルに戻りましょう ARKitのAccessoryAnchorに アクセスする必要がありますが 従来は RealityKitの AnchorEntityしかありませんでした 今年からは 任意の RealityKitのAnchorEntityから ARKitのアンカーを取得できます SpatialTrackingSessionが構成され 実行されていれば取得可能です RealityKitのAnchorEntityから ARKitのAccessoryAnchorを 取得する関数を設定しましょう AnchorEntityの ARKitAnchorComponentにアクセスし ARKitAnchorを取得して 条件付きで AccessoryAnchorにキャストします ARKitAnchorComponentの詳細については ビデオ「What’s new in RealityKit」で Laurenceによる説明をお聞きください

    ツールバーの表示に進みましょう 先ほど作成したヘルパー関数を使用して AnchorEntityから AccessoryAnchorを取得します handednessを使用して ツールバーの位置を特定します そのプロパティがaccessoryAnchorの heldChiralityに格納されます

    handednessがleftの場合は ツールバーがx軸の右に表示され rightの場合は左に表示されます それ以外の場合 アクセサリを手に持って いないので 左右どちらにも表示しません

    アプリ内でツールバーを見てみましょう 右手に持った状態でボタンを押すと ツールバーはアクセサリの左に表示されます 付加彫刻モードに切り替えて さっき削りすぎた箇所を 修正できます

    いい感じです! おさらいしましょう 新しい空間アクセサリのAPIを使用して イマーシブな彫刻アプリを作成しました Game Controllerフレームワークを使用して アクセサリに接続しました RealityKitのAPIを使用して 彫刻ツールを作成しました リアクティブなツールバーを表示するために RealityKitとARKitの機能を 組み合わせて使用しました 完成したアプリは見た目も操作感も良好です 一方 ARKitを直接使用したい場合や カスタムレンダリングを使用して アプリを構築したい場合は ご紹介したものと同じように 空間アクセサリのトラッキングに利用できる APIがあります 詳しく見てみましょう AccessoryTrackingProviderと AccessoryAnchorの新機能を活用した ARKitによるアクセサリトラッキングの 重要ポイントを解説します GCStylusまたはGCControllerを使用して Accessoryを作成します

    AccessoryTrackingProviderを使用して Accessoryオブジェクトをトラッキングします アクセサリがアプリに 接続または切断された場合 適切に処理する必要があります つまり Accessoryの構成を変更して ARKitセッションを 再実行する必要があります

    この実装方法については ARKitのサンプルアプリをご覧ください 「Tracking accessories in volumetric windows」です アクセサリのアンカーの更新パターンは 手のアンカーと似ています ストリームで正確な更新を受け取るか オンデマンドの予測で インタラクティブな ユーザーフィードバックを取得します ARKitの予測機能の詳細については 「Create enhanced spatial computing experiences with ARKit」をご覧ください ここまで 各種の優れた 空間アクセサリのAPIを見てきました 次は アプリを構築する際の デザイン上の考慮事項を紹介します まずは ジェスチャを使ったUIの操作です ジェスチャではなく ボタンやトリガなどの ゲームコントローラの入力を受け付けるよう ビューに指示することは以前からできました 今年 標準的なハンドジェスチャと ゲームコントローラの両方を ビューの入力として処理できるようになりました

    コードでは次のように記述します ゲームコントローライベントを 受け付けるよう SwiftUIビューに指示します 次に ジェスチャイベントも受け付けるよう 指示するために .receivesEventsInViewモディファイアを 設定します

    空間アクセサリトラッキングが ゲームコントローラにある場合 SpatialEventGestureに ゲームコントローラの chirality つまり 先ほどのhandednessが入力されます

    フルスペースで実行されるアプリの場合は .persistentSystemOverlays APIを使用して ホームインジケータを非表示にしたり .upperLimbVisibility APIを使用して ユーザーの腕やアクセサリを 非表示にしたりできます これにより アプリやゲームの イマーシブ感がさらに高まります 空間アクセサリにより 今までにない 強力な方法でアプリやゲームを操作できます また アプリでできるだけ 幅広いユーザーをサポートできるように 空間アクセサリと手の両方に対応する アダプティブなサポートを提供できます

    今年 ARKitはネイティブの ハンドトラッキングが高速化し 手と視線による入力が向上しています

    空間アクセサリのトラッキングに対応した ゲームコントローラを サポートしていることをアピールするために 「Spatial game controller support」バッジを App Storeで表示できます 空間アクセサリのトラッキングに対応した ゲームコントローラが必須のアプリでは 「Spatial game controller required」バッジを 表示できます バッジを表示するために アプリのplistに追加するキーについては ドキュメントでご覧ください 本セッションのまとめです 空間アクセサリにより 細かい入力制御と 触覚フィードバックを実現できます アクセサリの導入に使うのはGame Controller フレームワーク、RealityKit、ARKitです アプリのデザインでは 手やアクセサリに対応した アダプティブなサポートを組み込みます 今回ご紹介したのは 空間アクセサリを使用して アプリやゲームを構築する方法の ほんの一例です 皆さんの作品を楽しみにしています WWDC25をお楽しみください

    • 0:09 - Get in-app transforms

      // Get in-app transforms
      
      let session = SpatialTrackingSession()
      
      let configuration = SpatialTrackingSession.Configuration(tracking: [.accessory])
      
      await session.run(configuration)
    • 4:57 - Check for accessory support

      // Check spatial accessory support
      
      NotificationCenter.default.addObserver(forName: NSNotification.Name.GCControllerDidConnect, object: nil, queue: nil) {
        notification in
          if let controller = notification.object as? GCController,
             controller.productCategory == GCProductCategorySpatialController {
                   
          }
      }
    • 7:20 - Anchor virtual content to an accessory

      // Anchor virtual content to an accessory
      
      func setupSpatialAccessory(device: GCDevice) async throws {
      
          let source = try await AnchoringComponent.AccessoryAnchoringSource(device: device)
      
          guard let location = source.locationName(named: "aim") else {
              return
          }
        
          let sculptingEntity = AnchorEntity(.accessory(from: source, location: location),
                                             trackingMode: .predicted)
      
      }
    • 9:45 - Add haptics to an accessory

      // Add haptics to an accessory
      
      let stylus: GCStylus = ...
      
      guard let haptics = stylus.haptics else {
          return
      }
      
      guard let hapticsEngine: CHHapticEngine = haptics.createEngine(withLocality: .default) else {
          return
      }
      
      try? hapticsEngine.start()
    • 11:25 - Access ARKit anchors from AnchorEntity

      // Access ARKit anchors from AnchorEntity
      
      func getAccessoryAnchor(entity: AnchorEntity) -> AccessoryAnchor? {
          if let component = entity.components[ARKitAnchorComponent.self],
             let accessoryAnchor = component.anchor as? AccessoryAnchor {
              return accessoryAnchor
          }
          return nil
      }

Developer Footer

  • ビデオ
  • WWDC25
  • visionOSでの空間アクセサリ入力の詳細
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習とAI
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン