Skip to main content

射线检测(Raycast)

VRChat 中的 VRCRaycast 组件允许虚拟形象发射穿过场景的射线,与世界中的碰撞体或玩家发生碰撞。一个变换(transform)会被定位在射线命中的位置。

组件属性​

VRCRaycast

属性描述
Raycast Direction发射射线的方向。这在本地空间中应用,因此会受到变换旋转的影响。
Distance射线能行进的最大距离。如果设置为零,射线将尽可能远地行进(1000 单位)。
Apply Transform Scale如果启用此属性,此组件所附加的变换的 lossy Z 缩放将影响射线距离。
Collision Mode控制此射线组件将碰撞的层:你可以让它与世界使用的层、玩家碰撞体使用的层,或两者同时碰撞。对于高级用例,你也可以手动定义要碰撞的特定层。
Hit Worlds射线将与 Default 和 Environment 层以及所有用户控制的层碰撞。(默认)
Hit Players射线将与 Player 和 PlayerLocal 层碰撞。
Hit Worlds And Players射线将同时与世界和玩家碰撞,结合上述两个选项的层。
Hit Custom Layers射线将与手动指定的一组层碰撞。
Custom Collision Layers当 Collision Mode 设置为 Hit Custom Layers 时使用的自定义层组。当不使用自定义层时,此属性被隐藏。
Result Transform将被移动并可选旋转以匹配射线碰撞点的变换。必须指定 Result Transform 才能使此组件发挥作用。
Apply Rotation默认情况下,Result Transform 只会更改其位置。如果启用 Apply Rotation,它还会旋转,使其对齐轴指向远离被碰撞表面的方向(碰撞法线)。
Alignment Axis当对结果变换应用旋转时,控制哪个轴将与碰撞表面对齐。当不对结果应用旋转时,此属性被隐藏。
Behavior On Miss控制 Result Transform 组件在未命中任何东西时的行为:
Do Nothing对 Result Transform 不做任何操作。(默认)
Snap To Start将 Result Transform 移动到射线的起点。如果启用 Apply Rotation,还会应用旋转,使其朝向射线组件。
Snap To End将 Result Transform 移动到射线的终点。如果启用 Apply Rotation,还会应用旋转,使其朝向射线组件。
Parameter用于将射线信息传递给虚拟形象动画器的前缀。更多详情,请参见下方的射线参数。
warning

每个虚拟形象最多有 80 个 VRCRaycast 组件的硬性上限。

出于兼容性原因,此限制与 FinalIK 组件共享,在 VRCRaycast 足以满足需求的情况下,通常不应使用 FinalIK。

射线参数​

Parameter 属性允许你定义多个参数,将射线信息传递给虚拟形象控制器。例如,在以下项目中,将 Parameter 设置为 Beam 会将 {parameter} 替换为 Beam。

一旦 Parameter 设置为任意值,以下参数将在虚拟形象的动画器上设置:

  • {parameter}_Hit [Bool] - 射线是否命中了某物。

  • {parameter}_Ratio [Float] - 0.0-1.0 范围。射线在命中某物之前行进的总距离的比例。例如,如果它行进了最大配置距离的一半,此值将设置为 0.5(50%)。

  • {parameter}_Distance [Float] - 射线在命中某物之前实际行进的世界距离。

当射线没有命中任何东西时,{parameter}_Ratio 和 {parameter}_Distance 参数的行为如下:

  • 如果 Positioning On Miss 设置为 Do Nothing,这两个参数都将保留上次射线命中某物时的值。如果射线从未命中过任何东西,它们都设置为零。

  • 如果 Positioning On Miss 设置为 Snap To Start,这两个参数都设置为零。

  • 如果 Positioning On Miss 设置为 Snap To End,比率设为一,距离设为此组件允许射线行进的最大距离。

使用技巧​

  • 射线最大距离限制为 1000 单位。
  • 不要将 VRCRaycast 组件附加到的变换或其任何父级用作其结果变换。这样做可能会导致不可预测的行为,因为射线组件会被自己的结果移动。
  • 当启用 Gizmos 时,在虚拟形象项目中选中 VRCRaycast 组件后,场景视图中会绘制一条橙色线条,显示射线将去往何处。
  • 你可以在虚拟形象项目中进入播放模式来测试射线的行为,而无需构建虚拟形象。