Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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