unity-xr について
unity-xr は、Unity XR Interaction Toolkit のシーン設定を行うスキルモジュールです。VR/AR のインタラクションを構築する開発者向けで、XRI 2.x と 3.x に対応します。
主な機能
- 01XR 設定とシーン状態の確認
- 02XR Origin とインタラクションマネージャーの作成
- 03レイ・ダイレクト・ソケットインタラクターの設定
- 04グラブ、テレポート、連続移動の設定
- 05XR UI への変換とハプティクス設定
活用シーン
- 01VR/AR シーン用 XR rig の構築
- 02オブジェクトのグラブとソケット配置の設定
- 03テレポートまたはスティック移動の設定
- 04コントローラーレイによる Canvas UI 操作
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ besty0728/ unity-skills --skill unity-xrインストール後、Claude Code で/unity-xrを入力して読み込まれたか確認します。
同梱ファイルAPI_REFERENCE.md
詳細
このモジュールのスキルを呼び出す前に: 名前や説明から推測したパラメーターでスキルを呼び出そうとしている場合は、いったん停止してください。まずこのファイルを読むか、
GET /skills/recommend?includeSchema=trueでスキーマを取得してください。recommend/schema からパラメーター定義をすでに取得している場合は、そのまま dryRun に進めます。
トリガー
- VR/AR インタラクションの構築
- XR リグのセットアップ
- グラブ/ソケット/レイインタラクターの設定
- VR/AR インタラクションの構築、XR リグのセットアップ、グラブ/ソケット/レイインタラクターの設定
Unity XR Interaction Toolkit スキル
XR Interaction Toolkit のセットアップと設定には、このモジュールを使用してください。すべての xr_* スキルはリフレクションベースで、Unity 2022 の XRI 2.x および Unity 6 以降の XRI 3.x に対応しています。
必要要件:
com.unity.xr.interaction.toolkit。 厳守事項:セッションで最初のxr_*呼び出しを行う前に、このファイルを読んでください。ブリッジがリフレクションベースのため、プロパティ名が間違っていてもエラーにならず、処理が失敗することがあります。
ガードレール
動作モード(v1.9 の3段階):
- Approval(デフォルト):クエリ/一覧/情報取得スキル(
xr_check_setup、xr_get_scene_report、xr_list_interactors、xr_list_interactables)は直接実行されます。作成/変更スキルは FullAuto です。MODE_RESTRICTEDの場合は許可プロトコルを実行してください。/permission/grantが成功すると、スキルがサーバー側で実行され、同じ応答内で結果が返されます。 - Auto/Bypass:SemiAuto と FullAuto は直接実行されます。
- このモジュールには Delete/PlayMode/Reload/
RiskLevel="high"のスキルは含まれていないため、禁止対象として自動分類されるものはありません。すべてのスキルが許可によって利用できます。 com.unity.xr.interaction.toolkitがない場合、すべてのxr_*スキルは実行されず、代わりにNoXRI()のインストール手順を返します。- リフレクション依存:XRI コンポーネントのプロパティ名は、XRI 2.x/3.x の定義と正確に一致している必要があります。
xr_configure_interactable/xr_configure_hapticsで誤ったフィールド名を指定しても、無視されるだけです。xr_configure_interaction_layersはレイヤー名または整数マスクを受け取り、未定義の名前は拒否します。詳細なプロパティを編集する前に、API_REFERENCE.mdを読み込んでください。
しないこと(よくある誤り):
XRHand、XRPlayer、XRTeleporter、GrabInteractor、VRController、XRLocomotion、XRManagerは、ここで使用するランタイムクラスではありません。interactable.OnGrab()/OnRelease()は XRI のイベントモデルではありません。selectEntered/selectExitedを使用してください。controller.vibrate()はここで説明されている方法ではありません。xr_configure_hapticsで触覚を設定してください。- 物理レイヤーやタグが
InteractionLayerMaskの代わりになると考えないでください。 - コンポーネントのプロパティ名を推測しないでください。詳細な XR コンポーネントのプロパティを設定する前に、
API_REFERENCE.mdを読み込んでください。
基準となる正しいクラス名:
XRInteractionManagerXROriginXRRayInteractorXRDirectInteractorXRSocketInteractorXRGrabInteractableXRSimpleInteractableTeleportationProviderTeleportationAreaTeleportationAnchorContinuousMoveProviderSnapTurnProviderContinuousTurnProviderTrackedDeviceGraphicRaycasterXRUIInputModuleTrackedPoseDriver
振り分け:
- XR 以外の Canvas UI の作成には、
uiを使用してください。 - XR ゲームプレイコードのアーキテクチャやライフサイクルの判断には、
architecture、patterns、async、scriptdesignなどの助言モジュールを読み込んでください。 - 正確なコンポーネントプロパティ名やワークフローの全例については、
API_REFERENCE.mdを読み込んでください。
スキル
セットアップと診断
| スキル | 用途 | 主なパラメーター |
|---|---|---|
xr_check_setup | XR パッケージ、リグ、マネージャー、シーンの前提条件を検証 | verbose? |
xr_setup_rig | XR Origin、カメラ、コントローラーを作成 | name、cameraYOffset? |
xr_setup_interaction_manager | マネージャーを追加または検索 | なし |
xr_setup_event_system | XR UI 入力スタックを置き換え/追加 | なし |
xr_get_scene_report | シーン側の XR 状態をレポート | なし |
インタラクターとインタラクタブル
| スキル | 用途 | 主なパラメーター |
|---|---|---|
xr_add_ray_interactor | 遠距離からのポインティング/レイ操作 | name、maxDistance?、lineType? |
xr_add_direct_interactor | 近距離での手によるつかみ | name、radius? |
xr_add_socket_interactor | スロットへのスナップ配置 | name、showHoverMesh?、recycleDelay? |
xr_add_grab_interactable | Rigidbody + コライダー + つかみ設定 | name、movementType?、throwOnDetach? |
xr_add_simple_interactable | つかまずにホバー/選択 | name |
xr_configure_interactable | インタラクタブルの動作を詳細に調整 | 対象 + 変更するフィールドのみ |
xr_list_interactors | シーン内のすべてのインタラクターを一覧表示 | なし |
xr_list_interactables | シーン内のすべてのインタラクタブルを一覧表示 | なし |
移動と XR UI
| スキル | 用途 | 主なパラメーター |
|---|---|---|
xr_setup_teleportation | XR Origin にテレポートプロバイダーを追加 | なし |
xr_add_teleport_area | サーフェスをテレポート可能として設定 | name、matchOrientation? |
xr_add_teleport_anchor | 固定のテレポート先を作成 | name、x/y/z、rotY?、matchOrientation? |
xr_setup_continuous_move | スティックによる移動を追加 | moveSpeed?、enableStrafe?、enableFly? |
xr_setup_turn_provider | スナップターンまたはスムーズターンを追加 | turnType、turnAmount?、turnSpeed? |
xr_setup_ui_canvas | Canvas を XR 操作用に変換 | name |
フィードバックとフィルタリング
| スキル | 用途 | 主なパラメーター |
|---|---|---|
xr_configure_haptics | ホバー/選択時の振動を設定 | name、強度、持続時間 |
xr_add_interaction_event | インタラクションのコールバックを対象メソッドに接続 | name、eventType、targetName、targetMethod |
xr_configure_interaction_layers | InteractionLayerMask を設定 | name、layers、isInteractor |
クイックスタート
import unity_skills as u
u.call_skill("xr_check_setup")
u.call_skill("xr_setup_rig", name="XR Origin")
u.call_skill("xr_add_ray_interactor", name="Right Controller")
u.call_skill("xr_add_direct_interactor", name="Left Controller")
u.call_skill("xr_setup_teleportation")
u.call_skill("xr_setup_turn_provider", turnType="Snap", turnAmount=45)
u.call_skill("xr_add_grab_interactable", name="MyCube", movementType="VelocityTracking")
ワークフローの概要
リグのセットアップ
xr_check_setupを実行します。xr_setup_rigでリグを作成します。xr_setup_event_systemで XR UI 入力が存在することを確認します。- 各コントローラーに少なくとも 1 つのインタラクターを追加します。
つかみのセットアップ
- 直接手でつかむ:
xr_add_direct_interactor+xr_add_grab_interactable - 距離を置いてつかむ:
xr_add_ray_interactor+xr_add_grab_interactable - ソケットに配置:
xr_add_socket_interactor+ つかみ可能なオブジェクト
movementType のデフォルト設定は重要です:
VelocityTracking:汎用的な物理つかみに最適ですKinematic:引っかからないようにしたいハンドル/ツールに使用しますInstantaneous:正確な遠距離つかみに最適です
移動のセットアップ
- テレポート:
xr_setup_teleportation+xr_add_ray_interactor+xr_add_teleport_area/xr_add_teleport_anchor - 連続移動:
xr_setup_continuous_move - 旋回:
xr_setup_turn_provider
快適性を考慮したデフォルト設定:スナップターン + 中程度の移動速度(~2.0 m/s)。
XR UI
xr_setup_ui_canvasで Canvas を変換しますxr_setup_event_systemが設定されていることを確認します- UI をクリックするコントローラーにレイインタラクターを追加します
Collider Configuration Matrix
これは、このリポジトリで最も重要な XR の誤った情報を防ぐための表です。
| コンポーネント | Collider が必要 | isTrigger | 推奨 Collider | 理由 |
|---|---|---|---|---|
XRDirectInteractor | はい | True | SphereCollider(0.1-0.25) | 重なりの検出 |
XRRayInteractor | いいえ | - | なし | レイキャストを使用 |
XRSocketInteractor | はい | True | SphereCollider(0.1-0.3) | スナップゾーン |
XRGrabInteractable | はい | False | BoxCollider または convex MeshCollider | 物理演算 + レイの対象 |
XRSimpleInteractable | はい | False | BoxCollider | 選択の検出 |
TeleportationArea | はい | False | MeshCollider または BoxCollider | サーフェスのレイキャスト対象 |
TeleportationAnchor | はい | False | 薄い BoxCollider | ポイントのレイキャスト対象 |
重要なルール:
XRGrabInteractableにはRigidbodyが必要です。- つかめるオブジェクトの Collider はトリガーにしてはいけません。
- ダイレクトインタラクターの Collider は必ずトリガーにしてください。
- 動的なメッシュ Collider は凸形状である必要があります。
- ソケットの Collider は、トリガー専用の重なり判定領域にしてください。
バージョン互換性
| トピック | XRI 2.x | XRI 3.x |
|---|---|---|
| 主な名前空間の形式 | ルート名前空間 | 分割されたサブ名前空間 |
| リグの種類 | XROrigin | XROrigin |
| ロコモーションの中核 | LocomotionSystem | LocomotionMediator |
| コントローラーの種類 | ActionBasedController | ActionBasedController |
| ブリッジの動作 | リフレクションヘルパーが自動的にフォールバック | リフレクションヘルパーが 3.x を優先 |
重要な注意事項
- 通常、シーンには
XRInteractionManagerをちょうど 1 つ配置してください。 - ほとんどのロコモーションスキルは、
XROriginがすでに存在することを前提としています。 - パッケージのインストールや再設定によって、Domain Reload が発生することがあります。XR 呼び出しを再試行する前にお待ちください。
- インタラクターとインタラクタブルのフィルタリングには
InteractionLayerMaskを使用してください。 - カスタム XR スクリプトでは、可能な場合は
Update()によるポーリングよりも XRI のライフサイクルフックとイベントを優先してください。
最小限の例
import unity_skills as u
u.call_skill("xr_setup_rig", name="XR Origin", cameraYOffset=1.36)
u.call_skill("xr_setup_event_system")
u.call_skill("xr_add_ray_interactor", name="Right Controller", maxDistance=30, lineType="StraightLine")
u.call_skill("xr_add_grab_interactable", name="Tool", movementType="VelocityTracking", throwOnDetach=True)
u.call_skill("xr_configure_haptics", name="Right Controller", selectIntensity=0.7, selectDuration=0.15)
正確なシグネチャ
正確な名前、パラメーター、デフォルト値、戻り値は、このファイルではなく、GET /skills/schema または unity_skills.get_skill_schema() で定義されています。
XR コンポーネントのプロパティを詳細に設定する前に、API_REFERENCE.md を読み込んでください。XR のプロパティ名はリフレクションの影響を受けます。