Slide 1

Slide 1 text

visionOS Engineer Meetup vol.9 オンラインLT会 Craftrium で実現したObjectの 両 手 操作による編集機能 2025/02/14

Slide 2

Slide 2 text

登壇者情報 Graf fi ty(ג) ॴଐUnityΤϯδχΞ
 ઐ໳ྖҬɿα΢ϯυϓϩάϥϛϯά UnityΛத৺ͱͨ͠৘ใൃ৴ͳͲΛߦ͍ͬͯ·͢ɻ 2 visionOS Engineer Meetup vol.9 オンラインLT会 著書&査読協 力 @8bitdots https://qiita.com/Cova8bitdot @cova8bit.bsky.social

Slide 3

Slide 3 text

過去の登壇 3 visionOS Engineer Meetup vol.9 オンラインLT会 https://speakerdeck.com/cova8bitdots/handgesturetool-for-applevisionpro https://speakerdeck.com/cova8bitdots/ninjagazetyping-zhi-zuo-mi-hua

Slide 4

Slide 4 text

Graffity は松 竹 様と共同開発した空間ゲーム「Craftrium」先 月 リリースしました 4 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 5

Slide 5 text

今回は置物の編集操作についての技術的な部分の紹介になります 5 visionOS Engineer Meetup vol.9 オンラインLT会 移動 回転 拡 大 ・縮 小

Slide 6

Slide 6 text

VisionPro のハンドジェスチャーとして紹介されているのは6種類あります 6 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 7

Slide 7 text

Unity ではTap とTap終了のイベントしか開発者は受け取れません 7 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 8

Slide 8 text

UnityはHandTracking(各関節位置・向きの情報)は基本的にはSpaces でしか利 用 できません ※Spaces=Unityでいう Unbounded 8 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 9

Slide 9 text

先ほどのような制約の中でどうやって今回の操作を実現したのか?の紹介です 9 visionOS Engineer Meetup vol.9 オンラインLT会 移動 回転 拡 大 ・縮 小

Slide 10

Slide 10 text

移動 SECTION 1

Slide 11

Slide 11 text

移動はシンプルにTap 11 visionOS Engineer Meetup vol.9 オンラインLT会 Begin End ?

Slide 12

Slide 12 text

移動はシンプルにTap 12 visionOS Engineer Meetup vol.9 オンラインLT会 Begin End ?

Slide 13

Slide 13 text

移動はシンプルにTap 13 visionOS Engineer Meetup vol.9 オンラインLT会 Begin End ? Begin~End中はHoldのはず!

Slide 14

Slide 14 text

移動はシンプルにTap 14 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 15

Slide 15 text

移動はシンプルにTap 15 visionOS Engineer Meetup vol.9 オンラインLT会 PolySpatialのTap イベント処理 実際のTapイベント

Slide 16

Slide 16 text

VolumeApp でも「Tap/Touch」イベントであれば 手 の位置は取得可能 16 visionOS Engineer Meetup vol.9 オンラインLT会 https://docs.unity3d.com/Packages/[email protected]/manual/PolySpatialInput.html

Slide 17

Slide 17 text

VolumeApp でも「Tap/Touch」イベントであれば 手 の位置は取得可能 17 visionOS Engineer Meetup vol.9 オンラインLT会 https://developer.apple.com/documentation/swiftui/spatialeventcollection/event

Slide 18

Slide 18 text

VolumeApp でも「Tap/Touch」イベントであれば 手 の位置は取得可能 18 visionOS Engineer Meetup vol.9 オンラインLT会 https://developer.apple.com/documentation/swiftui/spatialeventcollection/event

Slide 19

Slide 19 text

先ほどのTapイベントのdevice位置情報をうまく流し込んであげれば完成 19 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 20

Slide 20 text

回転 SECTION 2

Slide 21

Slide 21 text

Unity では直接「Rotate」というイベントはとれません 21 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 22

Slide 22 text

Tapイベントで 二 個以上ある場合は両 手 操作のはず 22 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 23

Slide 23 text

Tapイベントで 二 個以上ある場合は両 手 操作のはず 23 visionOS Engineer Meetup vol.9 オンラインLT会 Touch/Tap数は とれる activeTouches[0]は最初にTapした 手 →右 手 /左 手 としては判定されないので注意

Slide 24

Slide 24 text

Tapイベントで 二 個以上ある場合は両 手 操作のはず 24 visionOS Engineer Meetup vol.9 オンラインLT会 ・右 手 /左 手 に依存するアルゴリズムはマズイ ・最初の 手 /2番 目 の 手 で成り 立 つアルゴリズムが 大 事

Slide 25

Slide 25 text

回転については、Rotation開始時の両 手 位置の線分(ベクトル) と 現在の両 手 位置の線分(ベクトル)の外積を回転軸として実装しました 25 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 26

Slide 26 text

回転については、Rotation開始時の両 手 位置の線分(ベクトル) と 現在の両 手 位置の線分(ベクトル)の外積を回転軸として実装しました 26 visionOS Engineer Meetup vol.9 オンラインLT会 彡 彡

Slide 27

Slide 27 text

回転については、Rotation開始時の両 手 位置の線分(ベクトル) と 現在の両 手 位置の線分(ベクトル)の外積を回転軸として実装しました 27 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 28

Slide 28 text

回転については、Rotation開始時の両 手 位置の線分(ベクトル) と 現在の両 手 位置の線分(ベクトル)の外積を回転軸として実装しました 28 visionOS Engineer Meetup vol.9 オンラインLT会 外積(回転軸) ( なす 角 :回転量

Slide 29

Slide 29 text

※ちなみにUnityは左 手 系なので、黒ベクトル x 赤 ベクトルの外積は 青方 向になるので   お気をつけください(学校で習う右ネジの法則とかは右 手 系です) 29 visionOS Engineer Meetup vol.9 オンラインLT会 ( https://docs.unity3d.com/jp/2018.4/ScriptReference/Vector3.Cross.html

Slide 30

Slide 30 text

先ほどの計算結果をうまく流し込んであげれば完成 30 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 31

Slide 31 text

拡 大 ・縮 小 SECTION 3

Slide 32

Slide 32 text

Unity では直接「Zoom」というイベントはとれません 32 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 33

Slide 33 text

Tapイベントで 二 個以上ある場合は両 手 操作のはず 33 visionOS Engineer Meetup vol.9 オンラインLT会 Touch/Tap数は とれる 再掲

Slide 34

Slide 34 text

VolumeApp でも「Tap/Touch」イベントであれば 手 の位置は取得可能 34 visionOS Engineer Meetup vol.9 オンラインLT会 https://docs.unity3d.com/Packages/[email protected]/manual/PolySpatialInput.html 再掲

Slide 35

Slide 35 text

Scale操作については両 手 のTap開始時の位置線分と 現在の両 手 位置の線分の 長 さの 比 をとってあげる 35 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 36

Slide 36 text

Scale操作については両 手 のTap開始時の位置線分と 現在の両 手 位置の線分の 長 さの 比 をとってあげる 36 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 37

Slide 37 text

Scale操作については両 手 のTap開始時の位置線分と 現在の両 手 位置の線分の 長 さの 比 をとってあげる 37 visionOS Engineer Meetup vol.9 オンラインLT会 440%

Slide 38

Slide 38 text

先ほどの計算結果をうまく流し込んであげれば完成 38 visionOS Engineer Meetup vol.9 オンラインLT会

Slide 39

Slide 39 text

Apple公式が紹介しているジェスチャーはUnity上で実装してあげれば実現可能です • 詳しいコードの解説はQiita にて既に公開中なので 是 非 ご活 用 いただければと思います。 39 visionOS Engineer Meetup vol.9 オンラインLT会 移動 回転 拡 大 ・縮 小 • https://qiita.com/Cova8bitdot/items/9b8817cae59486914b75