mcpField
U
unity-xr

unity-xr

github.com/besty0728开发1.9k75 次安装今天更新
代码仓库

关于 unity-xr

unity-xr 是用于 Unity XR Interaction Toolkit 场景配置的技能模块,面向构建 VR/AR 交互的开发者。它涵盖 XR rig、交互器、移动方式和 XR UI,并支持 XRI 2.x 与 3.x。

主要功能

  1. 01检查 XR 设置与场景状态
  2. 02创建 XR Origin 和交互管理器
  3. 03配置射线、直接及插槽交互器
  4. 04设置抓取、传送与连续移动
  5. 05转换 XR UI 并配置触觉反馈

适用场景

  1. 01搭建 VR/AR 场景的 XR rig
  2. 02配置抓取物体与插槽放置
  3. 03设置传送或摇杆移动
  4. 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 rig
  • 配置抓取/插槽/射线交互器
  • 构建 VR/AR 交互、搭建 XR rig、配置抓取/插槽/射线交互器

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 三层模式):

  • 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 配置触觉反馈
  • 不要假设物理 Layer 或 Tag 可以替代 InteractionLayerMask
  • 不要猜测组件属性名称。设置详细的 XR 组件属性前,请先加载 API_REFERENCE.md

应作为参照的正确类名:

  • XRInteractionManager
  • XROrigin
  • XRRayInteractor
  • XRDirectInteractor
  • XRSocketInteractor
  • XRGrabInteractable
  • XRSimpleInteractable
  • TeleportationProvider
  • TeleportationArea
  • TeleportationAnchor
  • ContinuousMoveProvider
  • SnapTurnProvider
  • ContinuousTurnProvider
  • TrackedDeviceGraphicRaycaster
  • XRUIInputModule
  • TrackedPoseDriver

路由:

  • 创建非 XR Canvas UI -> 使用 ui
  • 决定 XR 游戏代码的架构或生命周期 -> 加载 architecture、patterns、async 或 scriptdesign 等咨询模块
  • 查询精确的组件属性名称和完整工作流示例 -> 加载 API_REFERENCE.md

技能

设置与诊断
技能用途关键参数
xr_check_setup验证 XR 包、rig、管理器和场景前置条件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刚体 + 碰撞体 + 抓取配置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设置 InteractionLayerMaskname、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")

工作流概要

Rig 设置
  1. 运行 xr_check_setup。
  2. 使用 xr_setup_rig 创建 Rig。
  3. 使用 xr_setup_event_system 确保 XR UI 输入已就绪。
  4. 为每个控制器至少添加一个交互器。
抓取设置
  • 直接手部抓取: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
  1. 使用 xr_setup_ui_canvas 转换 Canvas
  2. 确保已运行 xr_setup_event_system
  3. 在需要点击 UI 的控制器上添加射线交互器

碰撞体配置矩阵

这是此仓库中最重要的 XR 防幻觉表格。

组件是否需要碰撞体isTrigger推荐的碰撞体原因
XRDirectInteractor是TrueSphereCollider(0.1-0.25)重叠检测
XRRayInteractor否-无使用射线投射
XRSocketInteractor是TrueSphereCollider(0.1-0.3)吸附区域
XRGrabInteractable是FalseBoxCollider 或凸 MeshCollider物理交互 + 射线目标
XRSimpleInteractable是FalseBoxCollider选择检测
TeleportationArea是FalseMeshCollider 或 BoxCollider表面射线投射目标
TeleportationAnchor是False薄 BoxCollider点射线投射目标

关键规则:

  1. XRGrabInteractable 需要 Rigidbody。
  2. 可抓取物体的碰撞体不能是触发器。
  3. 直接交互器的碰撞体必须是触发器。
  4. 动态网格碰撞体必须为凸面。
  5. Socket 碰撞体应仅用作触发器重叠区域。

版本兼容性

主题XRI 2.xXRI 3.x
主命名空间风格根命名空间拆分的子命名空间
Rig 类型XROriginXROrigin
移动核心LocomotionSystemLocomotionMediator
控制器类型ActionBasedControllerActionBasedController
桥接行为反射辅助程序会自动回退反射辅助程序会优先使用 3.x

重要说明

  1. 场景通常应当恰好包含一个 XRInteractionManager。
  2. 大多数移动技能都假定 XROrigin 已存在。
  3. 安装或重新配置软件包可能会触发 Domain Reload。请等待后再重试 XR 调用。
  4. 使用 InteractionLayerMask 筛选交互器和可交互对象。
  5. 编写自定义 XR 脚本时,尽可能优先使用 XRI 生命周期钩子和事件,而不是通过 Update() 轮询。

最小示例

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 属性名称对反射敏感。

评论

支持 Markdown