![見出し画像](https://assets.st-note.com/production/uploads/images/151599119/rectangle_large_type_2_8a9eff5724ccb445ad0f2fccbdec15fe.jpeg?width=1200)
Apple Vision Proアプリケーション開発(2)
前回記事で紹介した、空間にメモを配置するアプリの制作で工夫した点を紹介します。
今回は「メモを置く場所(=平面)を検出する」についてです。
メモを置く場所(=平面)を検出する
RealityKit で平面を検出するために AnchorEntity を使用します。実際のコードは下記のようなもので、縦横方向のどちらの平面も検出し、壁、床、天井など物体の種類は関係なく検出する設定です。
let anchor = AnchorEntity(.plane([.any], classification: [.any], minimumBounds: [0.1, 0.1]), trackingMode: .once)
![](https://assets.st-note.com/img/1724321101321-tPuskMqtit.png?width=1200)
これで Vision Pro の視界の中央付近の平面が検出できるのですが、これだけだと細かい位置の調整ができません。そこで検出した平面上に視線検出用のオブジェクトを敷き詰めて、そのオブジェクトのタップイベントを検出して、細かい位置を取得します。
平面上に視線検出用オブジェクトを敷きつめる
視線検出用のオブジェクトを配置すると、先ほどの平面はこのようになります。若干明るく光るオブジェクトは視線の当たっている場所を示しています。
![](https://assets.st-note.com/img/1724321141878-IqpqoUyxcb.png?width=1200)
視線検出用オブジェクトのタップイベントで位置を特定
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の標準ウインドウや操作音など工夫した点を紹介します。
株式会社ギガ・システム
ギガ・システムはシステム開発を専門とし、
基本設計からインフラ構築までトータルサポートを提供しています。
最新技術への挑戦を続け、医療機器ソフトウェア、IoT、クラウド技術をはじめとし、Vision Proを用いたMR技術への取り組みも進めています。
お客様のニーズに柔軟に対応するため、常に進化を続けています。
空間コンピューティングデバイスを含む最新技術のソリューションにご興味のある方からのお問い合わせ、お待ちしております。
お問い合わせ先
https://www.giga-system.co.jp/contact
GIGA TechLINK Magazine
Apple Vision ProといったMRデバイスや新しい技術全般の情報をお届けします。