Vision Pro向けアプリケーション開発(3)

Apple Vision Proの写真

前回記事で紹介した、空間にメモを配置するアプリの制作で工夫した点の続きを紹介します。
今回は「標準ウインドウや操作音」についてです。

メモウインドウの開閉

フルイマーシブ空間のアプリでも VisionOS 標準のウインドウを表示することができます。これによりメモ画面を SwiftUI で効率よく構築できます。

以下は付箋ピンがタップされた場合に、 `openWindow` でウインドウを開くコードの抜粋です。ここでは開くメモウインドウを1つに限定したかったため、先に `dismissWindow` を呼んでいます。しかし当時は `dismissWindow` 直後に `openWindow` すると前のWindowが開いていた位置に新しい Window を表示する挙動をしていたため、 ここでは 250 ms の遅延を入れています。

struct StickyNoteRealityView: View {
@Environment(AppState.self) private var appState
  @Environment(\.openWindow) private var openWindow
  @Environment(\.dismissWindow) private var dismissWindow
  @Environment(\.dismissImmersiveSpace) private var dismissImmersiveSpace

  :
  :
  var body: some View {
    RealityView { content in
    :
    :
    .gesture(
      SpatialTapGesture(count: 1)
        .targetedToAnyEntity()
        .onEnded { value in

    .gesture(
      SpatialTapGesture(count: 1)
        .targetedToAnyEntity()
        .onEnded { value in
          // 付箋ピンの場合の処理
          if (value.entity.name == ObjectIdentifier.stickyPin) {
            AudioServicesPlaySystemSound(SystemSound.SCREEN_SHARING_STARTED)
            let pinEntity = value.entity as! ModelEntity
            Task {
              dismissWindow(id: UIIdentifier.noteWindow)
              try! await Task.sleep(for: .milliseconds(250))
              let linkId = pinEntity.getLinkId() as! String?
              if linkId != nil {
                openWindow(id: UIIdentifier.noteWindow, value: linkId!)
                showTargetPlane = false
              }
            }
          }
          :

操作音について

視線とハンドジェスチャによる操作は、特に開発中は、ハンドジェスチャによるタップイベントが認識されないためプログラムが動作しないのか、タップイベントは入力されていてその先のプログラムに不具合があるのか切り分けが難しく困ることがあります。
そのような時はタップのようなユーザー操作に対して操作音を付けると判別が容易になります。

デバッグ目的で、完成度に拘らないのであれば下記のように`AudioServicesPlaySystemSound` を使ってシステム音を鳴らすことができます。

    :
    .gesture(
      SpatialTapGesture(count: 1)
        .targetedToAnyEntity()
        .onEnded { value in
          AudioServicesPlaySystemSound(SystemSound.SCREEN_SHARING_STARTED)
        :

参考情報など

3回に渡りお送りしてきましたが、次回は別の記事を投稿予定です。

Posted in AppleVisionPro |

Vision Pro向けアプリケーション開発(2)

Apple Vision Proの写真

前回記事で紹介した、空間にメモを配置するアプリの制作で工夫した点を紹介します。
今回は「メモを置く場所(=平面)を検出する」についてです。

メモを置く場所(=平面)を検出する

RealityKit で平面を検出するために AnchorEntity を使用します。実際のコードは下記のようなもので、縦横方向のどちらの平面も検出し、壁、床、天井など物体の種類は関係なく検出する設定です。

let anchor = AnchorEntity(.plane([.any], classification: [.any], minimumBounds: [0.1, 0.1]), trackingMode: .once)

メモを置く場所(=平面)を検出する

メモを置く場所(=平面)を検出する

これで Vision Pro の視界の中央付近の平面が検出できるのですが、これだけだと細かい位置の調整ができません。そこで検出した平面上に視線検出用のオブジェクトを敷き詰めて、そのオブジェクトのタップイベントを検出して、細かい位置を取得します。

平面上に視線検出用オブジェクトを敷きつめる

視線検出用のオブジェクトを配置すると、先ほどの平面はこのようになります。若干明るく光るオブジェクトは視線の当たっている場所を示しています。

平面上に視線検出用オブジェクトを敷きつめる

平面上に視線検出用オブジェクトを敷きつめる

視線検出用オブジェクトのタップイベントで位置を特定

RealityView に gesture を設定し、SpatialTapGesture でタップジェスチャを取得します。

下記の擬似コードのようにしてオブジェクトにタップイベントを追加します。タップの回数は count で設定できます。ダブルタップ、トリプルタップに個別の処理を設定することも可能です。

var body: some View {

RealityView { content in


.gesture(

SpatialTapGesture(count: 1).

.targetedToAnyEntity().
.onEnded { value in.

さて、以上で平面上のより細かい位置を取得して指定できるようになりました。どこに視線が当たっているか判別しやすいように hover エフェクトを追加しています。

※ 当時は hover エフェクトをカスタマイズできず視認性が良いとは言えませんでしたが、VisionOS 2.0 でエフェクトのカスタマイズがサポートされたようです。

次回、VisionOSの標準ウインドウや操作音など工夫した点を紹介します。

Posted in AppleVisionPro | Tagged , ,

Vision Pro向けアプリケーション開発

Apple Vision Proの写真

はじめに

株式会社ギガ・システムでは新しいプラットホームへの対応も積極的に行なっています。本記事では Vision Pro、VisionOSがもたらす空間コンピューティングにおける技術の調査・蓄積のためVision Pro向けアプリケーションを開発した事例についてご紹介します。

本事例では RealityKit を使って Vision Pro を装着して見た視界の任意の位置にメモを置くアプリケーションを作成しています。

※ 開発は 2023年11月〜2024年2月 の期間のため本記事の情報は当時のものになります。

開発技術

本記事では Vision Pro アプリケーションで視線による位置の指定を用いて、パススルーして見える視界の任意の場所に仮想のオブジェクト(=メモ)を配置する手法を紹介します。

以下の動画は開発したアプリで壁面やディスプレーにメモを配置する様子をキャプチャしたものです。赤い球体はメモを留める付箋ピンを表すオブジェクトです。付箋ピンをタップするとメモが表示される様子をご確認いただけます。

なお、本記事では紹介していませんが、このアプリでは WorldTrackingProvider, WorldAnchor を使ったメモの永続化の検証も行なっていますので別の記事でご紹介したいと思います。

所感

Vision OSでのアプリケーション開発は従来の iPhone, iPad 向けの開発体験とのギャップが少なく、これまでAppleプラットホームでの開発で蓄積した資産を活かせるようになっていてさすがAppleであると感じます。

またイマーシブ空間向けのアプリケーション開発では Unity による開発もオプションとして用意されていますが、Apple社の提供する RealityKit だけを利用した場合でも工夫次第で視線による空間上の位置指定など一見難しそうな機能が予想よりも簡単に実現できることがわかりました。

開発環境

開発環境(当時)は次のものです。

– MacBook Pro Apple M3 24GB
– XCode Version 15.4 (15F31d)

やったこと

Vision Pro, Vision OS では視線とハンドジェスチャによる操作が基本となりますが、通常の Vision OS アプリ開発の枠組みでは、まず空間上に視線を検出する3Dオブジェクトを置いて、その3Dオブジェクトに視線が当たった状態でタップなどのハンドジェスチャで発火するイベントに対応する処理を作り込んでいく流れになります。

しかし、本事例のように「視線の先にメモ(3Dオブジェクト)を置きたい」という場合、視線を検出するための3Dオブジェクトがないためすこし工夫が必要です。

Vision Pro 実機を入手した現在であれば「Scene Reconstruction API とレイキャスト」での実装を試みると思いますが、本事例に取り組んだ2023年11月頃はシミュレータのみでの開発であったためシミュレータでも動作確認ができる「RealityKit の AnchorEntity による平面検出」をベースに実装しています。

メモの置ける位置指定の粒度やユーザビリティを考慮して大まかな処理の流れを下記のようにしました。

1. メモを置く場所(=平面)を検出する
2. 1の平面上に視線検出用オブジェクトを敷きつめる
3. 視線検出用オブジェクトのタップイベントで位置を特定
4. 検出した位置に付箋ピン(およびメモ)を配置する

次回、工夫した点などを紹介します。

Posted in AppleVisionPro |

【VisionPro】日本語の音声入力について

Apple Vision Proの写真

日本語の音声入力が可能に

Apple Vision Proには、アクセシビリティの音声コントロールとは別に、音声によるテキスト入力機能があります。この機能では、日本語での音声入力が可能です。

例えば、メモアプリで編集中にマイクアイコンを見つめるかタップして日本語で話すと、高精度で認識されます。

ただし、ここで一つ注意点があります。

設定の音声入力言語の選択で、日本語だけをONにしておく必要があります。英語もONにしていると、英語が優先されてしまい、日本語の音声入力ができなくなります。

設定方法

以下の手順で設定を変更出来ます:

1. 設定 → 一般 → キーボード → 音声入力言語

Apple Vision Pro アプリメニュー、設定アプリ

Apple Vision Pro アプリメニューで設定アプリを開く

設定アプリで、一般を開き、キーボードを開く

設定アプリで、一般を開き、キーボードを開く

キーボード設定一覧の音声入力言語を開く

キーボード設定一覧の音声入力言語を開く

2. 英語をOFFにし、日本語のみをONにする

音声入力言語で、英語(日本)がONの場合、OFFにする

音声入力言語で、英語(日本)がONの場合、OFFにする

日本語のみがON

日本語のみがON

Apple Vision Pro アプリメニュー、メモアプリで日本語の音声入力をテストする

メモアプリで日本語の音声入力をテストする

メモアプリで入力モード時のキーボードのマイクアイコンをタップして話すと、日本語の音声入力がテストできる

メモアプリで入力モード時のキーボードのマイクアイコンをタップして話すと、日本語の音声入力がテストできる

これで、日本語の音声入力がスムーズに行えるようになります。

是非、皆さん試してみてください。

Posted in AppleVisionPro |

【VisionPro】日本語の音声コントロールについて

Apple Vision Proの写真

今日はApple Vision Proについて、最新の情報を共有したいと思います。

特に、日本でのリリースに伴う新機能やアクセシビリティの改善についてお話しします。

VisionOS 1.2の登場と音声コントロールの現状

Apple Vision ProにはVisionOS 1.2が搭載されています。

このバージョンでは、アクセシビリティの向上に力を入れています。

特に注目すべきは、音声コントロールの言語設定に日本語が追加されたことです。

しかし、ここで少し残念なお知らせがあります。

現在、日本語を選択してもUS Englishに切り替わってしまう問題が発生しています。

つまり、日本語の音声コントロールはまだ使用できない状態です。

VisionOS 2.0 ベータ版のサプライズ

次に、VisionOS 2.0のベータ版がリリースされました。

私は早速、音声コントロールの言語設定で日本語を選択して試してみました。

結果は…なんと、日本語の音声コントロールが使えるようになっていました!

これは非常に喜ばしいバージョンアップです。

ベータ版とはいえ、今後の正式リリースに向けて期待が高まります。

設定方法

1. 設定 → アクセシビリティ → 音声コントロール → 音声コントロールをONにする

Apple Vision Pro アプリメニュー、設定アプリ

Apple Vision Pro アプリメニューで設定アプリを開く

設定一覧、アクセシビリティ一覧、音声コントロールを開く

設定一覧でアクセシビリティを開き、音声コントロールを開く

音声コントロールをONにし、言語を開く

音声コントロールをONにし、言語を開く

2. 言語 → 日本語(日本)を選択する → 「音声コントロールの準備ができました 日本語(日本)」が右上のマイクアイコンで表示されたら使えるようになる

言語で、日本語(日本)を選択し、右上マイクアイコンで、音声コントロールの準備ができました 日本語(日本)が表示された使えるようになる

言語で、日本語(日本)を選択し、右上マイクアイコンで、音声コントロールの準備ができました 日本語(日本)が表示された使えるようになる

まとめ

Apple Vision Proの最新バージョンでは、日本語のサポートが強化されています。

特に、VisionOS 2.0のベータ版での日本語音声コントロールは期待大です。

まだまだ改善の余地はありますが、日本のユーザーにとっては嬉しいニュースです。

また、この機能を活かせた記事など公開したいと思います。

今後もさらに使いやすくなることを期待しつつ、

引き続きアップデート情報をお届けしますので、お楽しみに!

Posted in AppleVisionPro |

【VisionPro】Persona(ペルソナ)の完成度

今回は、Apple Vision Pro にベータ版として搭載されているPersona(ペルソナ)について投稿します。

Persona(ペルソナ)とは?

VisonProを装着していると、Web会議やFaceTimeなどのビデオ通話機能にて自分の顔を映すことが出来ない問題があります。

そこで搭載されたのがPersonaモード(ベータ版)です。

・仮想アバターの作成

→フロントカメラを使って撮影します。

音声に従って、上をむいたり下をむいたりと指示に従うだけでOK。

その後、装着し少し待つと完成です。

 

Persona(ペルソナ)の完成度!!

これが凄い。

凄いの一言です。

どっからどう見ても私です。

強いていうなら実物よりも良く写っています(笑)

本物そっくりで、口の動きや目線、手の動きなどもそっくりに再現してくれます。

実際のスクリーンショットがこちら。

すごい完成度ですね!

これでベータ版なので、今後が楽しみです。

Zoomも対応しているようなので、社内会議でVisionProで参加して気付かれるか

また試してみようと思います。

Posted in AppleVisionPro |

【VisionPro】ゲストモードについて

AppleVisionProは、iPhoneと同じように1端末1ユーザーで紐づいています。

手の設定、視線の設定など、はじめに設定したユーザーで登録されているので、

他の人がつけても視線設定が違うのでカーソル(アイトラッキング)が全く合いません。

届いた当初、無理やりズレた視線に合わせてなんとか設定画面にある

視線の設定にカーソルをあわせ、再設定を行って回し合いしていました。

 

Appleがそんな仕様にする訳も無く、きちんと用意されていました!

そう、ゲストモードと呼ばれるものが!

原理は簡単で、ゲストモードにした状態で他のユーザーに被ってもらうと、

手の設定、視線の設定などから始まり、そのユーザーにあった設定で体験が

出来るようになります。

※発売当日は情報が少なく、どうしたら他の人と共有出来るのか悩んでいました。

今では社員みんなで100%の状態でVisionProを試すことが出来、

100%みんな「おぉー!!」という声を上げて感動に包まれています。

少しでも情報共有になればと思い、投稿致しました。

設定方法は以下参照ください。

※スクショがうまく取れず、少し斜めになっているのはご了承ください・・・

 

①目線を上に向けたら出てくる下向き矢印をタップ

②右から2番目のコントロールセンターを開く

③アイコンが並んでいる、左から2番目の人型のアイコンをタップ

(月のようなアイコンの横)

④開始を選択すると、5分以内にゲストユーザーに渡してください、というような

メッセージが出るので、そのままVisionProを外して渡したら完了です。

是非、皆さん試してみてください。

Posted in AppleVisionPro |

Apple Vision Proが届きました!

6月28日 AppleVisionPro発売日。

弊社にも届きました。(2台)

実はAppleDeveloperラボで1回触ったことがあるのですが、

半年ほど前だったのですっかり感覚を忘れていました。

改めて、アイトラッキング、操作感などAppleの技術に感動!

没入感もすごく、凄い!しか出てこないです。

今までシミュレータ上でのアプリ開発しか出来ませんでしたが、

これで開発も進みそうです。

技術的な情報も今後発信していければと思っています。

ご期待ください。

Posted in AppleVisionPro |