Closed8

XR Intaraction ToolKit ことはじめ

TakayaTakaya

マイナーなモジュール

XRInputModalityManager

HandTrackingか,Controllerか入力モードを動的に切り替える機能
使用中のデバイスを見て自動的にInteractionSetをアクティブ・非アクティブにする

XRGazeInteractor

XR(VR/AR)環境での視線によるインタラクションを実現するためのコンポーネントです。Unity の XR Interaction Toolkit の一部として提供されています。

XRTransformStabilizer

XR環境での変換(Transform)の安定化を提供する特殊なコンポーネントです。

主な特徴は:

  • XR入力、特にレイ(Ray)の位置と回転の安定化
  • 低レイテンシーでの安定化処理
  • ジッター(微細な揺れ)の抑制
  • エイム(照準)の精度向上

XRInteractionGroup

XRInteractionGroup は Unity の XR Interaction Toolkit の重要なコンポーネントで、複数の XR インタラクターやグループをまとめて管理・制御するためのものです。

主な特徴は:

  • MonoBehaviour を継承し、IXRInteractionOverrideGroup と IXRGroupMember インターフェースを実装
  • グループ内のメンバー(インタラクターまたは他のグループ)の優先順位付けされた管理
  • 一度に1つのメンバーのみがインタラクションを実行可能
  • インタラクションの上書き(オーバーライド)機能

用途:

  • 左右のコントローラーと視線インタラクターのグループ化
  • インタラクターの優先順位付け
  • インタラクション競合の制御
  • 複雑なインタラクション階層の構築

このコンポーネントは、複数のインタラクターが存在する VR/AR アプリケーションで、それらの相互作用を適切に制御するために使用されます。

HapticImpulsePlayer

XR Interaction Toolkit内のコンポーネントで、XRコントローラーにハプティックフィードバック(振動)を送信するためのユーティリティです。

SphereInteractionCaster

XR Interaction Toolkit内のインタラクションのキャスト(判定)を球体形状で行うためのコンポーネントです。

主な特徴:

  • 球体の形状を使用してインタラクション可能なオブジェクトを検出
  • 半径による検出範囲の調整
  • Physics.SphereCastを使用した衝突判定

主な用途:

  • 手の周りのオブジェクトの検出
  • 近接インタラクションの実装
  • グラブ可能なオブジェクトの検出
  • 球体状の影響範囲を持つインタラクション

このコンポーネントは、直線的なレイキャストでは不自然な場合や、より自然な範囲での検出が必要な場合に使用されます。

TakayaTakaya

サンプル

AR Foundation Samples

https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@6.1/manual/index.html

からの

https://github.com/Unity-Technologies/arfoundation-samples#simple-ar

最初に触るのにちょうどいい

このサンプルが用意しているモジュール

汎用的にほかでもつかせそうなやつ

ControllerDeviceMonitor

XR(VR/AR)コントローラーの接続状態を監視するためのコンポーネントです。
主な機能は以下の通りです:

  • 左右いずれかのXRコントローラー(XRNode.LeftHand または XRNode.RightHand)の状態を監視
  • コントローラーの接続/切断状態に応じて、指定された GameObject の表示/非表示を制御
  • Unity の Input System を使用してデバイスの状態変更をリアルタイムで検知
TakayaTakaya

Near-Far Interactor

前提:

AR Foundation Samples の ARF XR Origin Set Up プレファブを大元にしての話

大事なこと:

  • Caster が大事
  • 近くは SphereInteractionCaster
    • ARF XR Origin Set Up のプレファブを使っている場合はついていない
    • Enable Near Casting を ON にして必ず D&D で Near Caster にいれる
      • じゃないと CurvelnteractionCaster がアタッチされてしまう
  • 遠くは CurvelnteractionCaster
  • CurveVisualController
    • Left_NearFarInteractor > LineVisual に付いている
    • Advanced Properties > Resting Visual Line Length が初期値がゼロ
      • 0.25 程度にすれば、常時レイが表示される
  • CurvelnteractionCaster
    • Hit Detection Type を Cone Cast, Cone Cast Angle を 6 ぐらいにすると遠くのものに触れやすくなる

XRI においてインタラクターやキャスターに依存しないでスナップ(吸い付き)を実現する方法

掴む側のオブジェクト(Grab Interactable) のインタラクタブルが付いていない配下の GameObject に XR Interactable Snap Volume コンポーネントをつける

  • インタラクタブル とは別のコライダにしないとエラーになる
  • 配下に専用の GameObject を設けて、コライダと XR Interactable Snap Volume をつけるのが無難
  • 新規に作ったコライダが吸い付くエリアになる

TakayaTakaya

XR Grab Interactable

uGUI に対して操作できるようにする

Interaction Layer Mask に UI を追加

レイを当てた場所が掴んだ軸になるようにする

Use Dynamic Attach を ON にする

TakayaTakaya

InputActionProperty

リファレンス参照に切り替えるときは左端の 縦3点 を押下

TakayaTakaya

Boundary visibility

Meta Quest 境界可視性機能を使用すると、境界の可視性を抑制して、パススルーを有効にした状態でユーザーが自由に移動できるようになります。

https://docs.unity3d.com/Packages/com.unity.xr.meta-openxr@2.1/manual/features/boundary-visibility.html

副作用で境界の外に出て中に戻ってきたときにイベントをこれで取れるようになる。

BoundaryVisibilityFeature を使ったコードを書くだけではだめ。
Meta Quest: Boundary Visibility にチェックをいれること

TakayaTakaya

LazyFollow と uGUI の World Canvas

rotationFollowMode は Lookat ではなくて Follow

このスクラップは2025/04/09にクローズされました