使用交互器抓取、按住和引发

概述

Mesh Interactionables 是一个系统,用于使用 Unity 脚本配置对象,用于定义与对象或虚拟形象行为的交互。 脚本定义可使用 XRI 交互的对象的属性。 网格工具包包含可定义的不同对象类型的脚本。 当项目运行时,它将设置对象或虚拟形象行为所要执行的所有必需 prefabs 和设置。 如果想要查看在网格应用中运行时可交互对象的外观的大致预览,请务必 使用网格仿真设置播放模式。 请注意,网格应用中看到的 IK 功能在“播放模式”中使用网格仿真不可用。

网格可交互安装组件

若要使对象可交互,必须添加 网格可交互安装 组件。

  1. 在层次结构,选择对象。
  2. 在检查器,单击“添加组件”按钮,然后选择“网格可交互设置”。

“添加组件”对话框的屏幕截图,其中选择了“网格可交互安装”组件。

添加组件并将其默认 对象类型 属性设置为 Interactable。 (下一部分将介绍对象类型。

网格可交互安装组件的屏幕截图,对象类型设置为“可交互”。

可以使用父 网格可交互安装 组件设置一组对象的属性,这些对象的行为相同。 通过向每个子对象自动添加 网格交互正文 组件,这些属性将应用于运行时具有刚性体的所有子级。 可能需要手动添加 网格交互正文 ,以便通过 视觉脚本使用网格交互对象,例如交互事件或修改可操纵的目标转换。

网格可交互正文组件的屏幕截图。

注意:

  • 网格可交互正文 将允许每个可交互者独立运行。

  • 如果要启用物理,则必须将刚性体添加到对象中。

可交互对象类型

有四种对象类型:

  • 可交互
  • Manipulable
  • 可装备
  • 可引发

选择对象类型

  • 网格交互安装 组件中,单击“ 对象类型 ”下拉列表,然后选择四个选项之一。

网格可交互正文组件中“对象类型”菜单选项的屏幕截图。

可交互

如上所述,这是默认类型和最基本的类型。 它提供对回调的访问权限,当用户将鼠标悬停在用户上方或选择可以让其他脚本响应的对象时,可以调用这些回调。 例如,如果你有一个用于启用另一个对象的按钮,请将此类型添加到具有 OnSelected 回调的对象以启用该其他对象。 只需添加此类型和碰撞体即可完全交互该按钮;你不必执行任何其他操作。

Manipulable

此类型的对象可以在运行时对其进行转换,并将在交互器光线的末尾移动空间。 快捷控件可用于旋转或转换对象。 若要在网格应用中操作对象,可以打开虚拟形象手的 IK 设置以跟踪该对象。 可操纵对象不需要刚性对象,但如果希望对象具有物理功能,则应添加一个对象。

正在操纵咖啡机的网格体验的屏幕截图。

可装备

此类型的对象将附加到头像的手。 用于装备的电脑控件是在选定对象时单击对象或按“F”。 选择对象时,装备的 Quest 控件按“手柄”按钮。 可装备的对象包含用于虚拟形象手臂姿势的 IK 目标的设置,而该对象已配备。 IK 目标与头像胸部的偏移量:这将确定在对象被保存或激活时手的位置。

可引发

顾名思义,可以抓取并引发此类型的对象。 抓住后,可以通过按住鼠标左键进入目标模式。 这将允许你的头像的手臂跟随你的鼠标目标;若要引发对象,请释放鼠标左键。

一个达特游戏的屏幕截图,用一个达特抓住并阅读被扔。

所有 Interactionables 组件都具有可视化脚本可用的交互属性和方法,因此你可以通过无限数量的方法来使它们协同工作。

使对象与 Visual Scripting 交互

如果要设置对象与 视觉脚本交互的反应,可以使用 脚本图中的网格可交互正文 组件与可用属性(如 OnHoveredOnSelected)连接到 OnStateChanged 节点。 例如,在按下按钮时,以下脚本图将启用柱形图,并在释放按钮时将其禁用。 只需添加脚本和碰撞器即可完全交互该按钮;你不必执行任何其他操作。

脚本图的屏幕截图,其中网格可交互正文为“已选择”节点。

设置

Manipulables、Equippables 和 Throwables 通用的设置

网格可交互安装组件的屏幕截图,其中突出显示了所有对象类型共有的属性。

交互邻近半径 最远距离,头像可以与此对象交互

悬停 IK 设置 – 将鼠标悬停在对象上时要使用的 IK 设置

  • 手摆姿势形状:将手摆姿势形状悬停在对象上时,将头像的手放在手上
  • 手姿势大小:手部姿势的大小(从 0 到 1)。
  • 启用 IK 跟踪:在使用 IK 目标悬停时,头像的手臂是否会到达对象。
    • 约束 IK 球形:如果为 true,arm IK 将在球体上完成。 这将导致头像手臂不直截了当。

突出显示设置

  • 悬停/已选中:如果对象突出显示或已选中,则是否突出显示对象。

  • 突出显示机制

    • 菜单项 1: 着色器属性

      • 突出显示颜色:突出显示对象时设置材料的颜色属性的颜色。
      • 突出显示切换持续时间:切换时淡出突出显示的时间量。
      • 突出显示量属性:突出显示时要设置突出显示量的材料属性。 这是一个浮点值。
      • 突出显示颜色属性:在突出显示时设置突出显示颜色的材料属性。 这是一个颜色值。
    • 菜单项 2: 网格轮廓:向对象添加指定颜色/宽度的自动轮廓。

      • 突出显示颜色:轮廓的颜色。
      • 突出显示切换持续时间:切换时淡出轮廓的时间量。
      • 突出显示轮廓宽度:轮廓应有多厚(以米为单位)。 替代图形工具/标准材料中的“延伸值”。
      • 自定义大纲材料:用于呈现轮廓的材料。
      • 自定义模具写入材料:使用的材料将值写入模具缓冲区
      • 大纲排除模式:用于筛选出不希望包含在大纲中的呈现器的选项。
    • 菜单项 3:内部发光使用给定属性应用具有发光效果的突出显示。

      • 突出显示颜色:内部发光的颜色。
      • 突出显示切换持续时间:在转换时淡出内部发光的时间量
      • 自定义突出显示材料:替代特定于此对象的选项以设置用于发光的材料。 如果未设置,将使用设置资产中的默认材料。
      • 排除字符串:如果已设置此项, 则包含排除字符串的名称的任何游戏对象都将从突出显示中排除。

专用于 Manipulables 的设置

网格可交互设置组件的屏幕截图,其中显示了可管理设置。

  • 强制模式: 用于通过空间强制对象的模式
    • 默认值: 使用其中心移动对象的默认 MRTK 行为。
    • 点春天: 通过向抓点应用力来移动对象的替代行为(仅适用于刚性体)
  • 旋转 (仅适用于默认模式)
    • 启用:操作时是否可以旋转对象。 可以单独设置每个轴。
    • 操作旋转逻辑
      • 默认值:操作对象时,它将围绕相机旋转,相对于相机保持相同的方向(实际转换值将旋转)。
      • 限制性:在操作对象时,它不会旋转其转换,并且不会保持相对于相机的相同方向。
  • 翻译 (仅适用于默认模式) =Enabled:操作时是否可以翻译对象。 可以单独设置每个轴。
  • 点 Spring (仅适用于点 Spring 模式)
    • 春天强度: 拉动对象的春天的力量。 值越高,达到目标点的速度就越快。
    • 阻尼因子: 应用多少阻尼来防止抓取点周围的振荡。
  • 修改目标转换: 为用户提供替代默认转换的选项,并在选定对象时设置对象相对于相机/头像的所需位置和旋转。 如果设置为 “已启用”,将获取以下三个属性:
    • 目标空间:
      • 相机的本地空间: 是否在相机本地空间中指定位置和旋转。
      • 虚拟形象的本地空间: 是否在虚拟形象本地空间中指定位置和旋转。
    • 新目标位置: 新目标位置(z 组件是相机/头像面对的方向)
    • 新目标旋转: 新目标旋转
  • 虚拟形象 IK
    • 手摆姿势形状:操纵对象时将虚拟形象的手放在手部的手
    • 手姿势大小:手部姿势的大小(从 0 到 1)。
    • 启用 IK 跟踪:使用 IK 目标操作时,虚拟形象的手臂是否会到达对象。
      • 约束 IK 球形:如果为 true,arm IK 将在球体上完成。 这将导致头像手臂不直截了当。

由“装备”和“引发”共享的设置

网格可交互安装组件的屏幕截图,其中突出显示了“装备”和“可引发”的常见设置。

  • 交互偏移量: 相对于头像手的位置和旋转偏移量来放置对象。
  • 装备目标姿势
    • 位置:从头像的胸部到装备物品时放置手的距离。
    • 旋转:装备物品时旋转手腕的量。
  • 握手姿势:
    • 手摆姿势形状: 这是一个下拉列表,提供一系列手摆形状,用于在装备时将头像的手放入其中。 还可以选择 “无”。
    • 手姿势大小: 手部姿势的大小(从 0 到 1)。

专用于“装备”的设置

网格可交互设置组件的屏幕截图,其中显示了“装备”设置。

  • 激活配置
    • 激活类型: 何时将项目设置为活动项。 无法激活可引发的对象,并且将始终将激活类型设置为 none。
      • :无法激活此项。
      • 切换: 每次单击激活控件时,此项在活动/非活动之间切换。
      • 单一: 单击激活控件后激活此项,然后在到达最后一个目标姿势后自动停用。
    • 激活目标姿势: 激活项目时用于放置头像手的目标姿势列表。 每个姿势由四个属性组成:位置、旋转、内插时间和动画曲线。 位置和旋转偏移量相对于头像的胸部。 头像将使用上一个姿势中的动画曲线内插到当前姿势,在内插时间中定义的时间量按顺序向下插入列表,直到停用。 停用后,虚拟形象手部姿势将向后移动浏览列表。

对 Throwables 的独占设置

网格可交互安装组件的屏幕截图,其中显示了“可引发设置”。

Aim 配置

  • 目标 上的 Arm 扩展 – 在目标模式下扩展臂的量。
  • 瞄准手姿势:
    • 手摆姿势形状: 在瞄准时将头像的手放在手上。
    • 手姿势大小: 手部姿势的大小(从 0 到 1)。
  • 目标手旋转: 瞄准时手部旋转
  • 投掷手姿势:
    • 手摆姿势形状: 在释放投掷时将虚拟形象的手放在手上
    • 手姿势大小: 手部姿势的大小(从 0 到 1)。
  • VR 最小抛出速度: 在 Quest 上引发时应用于对象的最小速度。
  • VR 最大抛出速度: 在 Quest 上引发时应用于对象的最大速度。 这是电脑上使用的速度值。 在 Quest 上,将根据用户的物理手臂移动来缩放速度。

在 Quest 上,在引发对象时应用的速度将使用用户手臂移动的实际速度在最小值和最大值之间缩放。

  • 2D 设置
    • 2D 引发速度:在电脑上引发对象时应用于对象的速度。
    • 引发方向偏移:在电脑上引发对象时应用于对象的方向偏移量。
  • 引发目标姿势: 一个目标姿势列表,用于在引发项目时放置头像的手。 当引发引发时,位置和旋转偏移量相对于虚拟形象的手的位置。 头像将使用上一个姿势中的动画曲线内插到当前姿势,按顺序向下排列列表,以内插时间定义的时间量。 该对象将释放,投掷手姿势将用于第二个目标到最后一个目标。

可视化脚本编写

对于所有可交互的正文:

  • 属性
    • IsHovered (只读) - 本地头像是否将鼠标悬停在对象上。
    • IsSelected (只读) - 是否选择任何虚拟形象。 在 MeshBrowser 中运行时,将建立网络。
    • IsSelectedLocally – 本地头像是否正在选择对象。
    • IsMine (只读) - 最后一个头像选择或装备对象时为 True。

对于“装备”:

  • 属性
    • EquippedAt (只读) - 此对象装备的位置 – None、DefaultHand、RightHand、LeftHand。 在 MeshBrowser 中运行时,将建立网络。
    • EquippTime (只读) - 此对象装备的时间。 在 MeshBrowser 中运行时,将建立网络。
    • IsActivated (只读) - 如果此对象处于激活状态。 仅对不可引发的对象有效。 在 MeshBrowser 中运行时,将建立网络。
    • IsAiming (只读) - 如果本地头像在保存此对象时处于目标状态。 仅对可引发项有效。
    • IsThrowing (只读) - 如果本地头像正在主动引发对象。 仅对可引发项有效。
    • IsEquipped (只读) (只读) - 如果此对象当前由虚拟形象提供。 在 MeshBrowser 中运行时,将建立网络。
    • IsThrowable – 如果此对象可引发。
    • ThrowVelocity – 释放对象时引发对象的速度。

对于可修改目标位置的可操作:

  • 目标位置(只读):在网格交互属性中使用默认强制模式时正文的目标位置
  • 目标旋转(只读):在网格可交互属性中使用默认强制模式时,正文的目标旋转
  • 光线命中位置(只读):人体上交互器的光线投射命中的位置
  • 光线命中旋转(只读):交互器围绕光线方向的旋转
  • 修改的目标位置(读取和写入):用于通过视觉脚本设置新的目标位置。 这将替代默认目标位置。 最佳做法是重写此属性:
    • 使用目标位置的状态更改。 在这种情况下,仅当交互器和新位置发生更改时,视觉对象脚本才会触发流。
    • 在后期更新上使用。 如果需要在每个帧中更改目标转换,请进行后期更新,以便下一帧中立即提供新的目标转换。
  • 修改的目标旋转(读取和写入):用于设置视觉对象脚本的新目标旋转。 这将替代默认目标位置。

设置

使用视觉脚本进行修改: 启用此项以使用可视脚本修改可操纵正文的目标转换。 Modify-with-visual-script

后续步骤