XR Intaraction ToolKit ことはじめ
良記事
マイナーなモジュール
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を使用した衝突判定
主な用途:
- 手の周りのオブジェクトの検出
- 近接インタラクションの実装
- グラブ可能なオブジェクトの検出
- 球体状の影響範囲を持つインタラクション
このコンポーネントは、直線的なレイキャストでは不自然な場合や、より自然な範囲での検出が必要な場合に使用されます。
サンプル
AR Foundation Samples
からの
最初に触るのにちょうどいい
このサンプルが用意しているモジュール
汎用的にほかでもつかせそうなやつ
ControllerDeviceMonitor
XR(VR/AR)コントローラーの接続状態を監視するためのコンポーネントです。
主な機能は以下の通りです:
- 左右いずれかのXRコントローラー(XRNode.LeftHand または XRNode.RightHand)の状態を監視
- コントローラーの接続/切断状態に応じて、指定された GameObject の表示/非表示を制御
- Unity の Input System を使用してデバイスの状態変更をリアルタイムで検知
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 をつけるのが無難
- 新規に作ったコライダが吸い付くエリアになる
XR Grab Interactable
uGUI に対して操作できるようにする
Interaction Layer Mask に UI を追加
レイを当てた場所が掴んだ軸になるようにする
Use Dynamic Attach を ON にする
InputActionProperty
リファレンス参照に切り替えるときは左端の 縦3点
を押下
Boundary visibility
Meta Quest 境界可視性機能を使用すると、境界の可視性を抑制して、パススルーを有効にした状態でユーザーが自由に移動できるようになります。
副作用で境界の外に出て中に戻ってきたときにイベントをこれで取れるようになる。
BoundaryVisibilityFeature
を使ったコードを書くだけではだめ。
Meta Quest: Boundary Visibility にチェックをいれること
LazyFollow と uGUI の World Canvas
rotationFollowMode は Lookat ではなくて Follow