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

| 属性 | 描述 | |
|---|---|---|
| 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 | 用于将射线信息传递给虚拟形象动画器的前缀。更多详情,请参见下方的射线参数。 |
每个虚拟形象最多有 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组件后,场景视图中会绘制一条橙色线条,显示射线将去往何处。 - 你可以在虚拟形象项目中进入播放模式来测试射线的行为,而无需构建虚拟形象。