Skip to main content

VRChat 中的 Unity 图层

图层在 Unity 中用于组织游戏对象、确定游戏对象之间的碰撞和射线检测、选择性地渲染场景的某些部分等。

你可以在 VRChat 世界中自由使用大多数图层。 部分图层由 Unity 和 VRChat 共享使用。

当你使用 VRChat 的世界 SDK 创建 Unity 项目时,你的项目将自动配置为使用 VRChat 的内置图层。如果你更改碰撞矩阵、重命名或删除内置图层,当你将世界上传到 VRChat 时,这些更改将被覆盖。

图层 22-31 是未使用的"用户"Unity 图层。你可以自由编辑它们,对这些图层的更改在构建和上传世界时不会被丢弃。

Unity 内置图层​

下表列出了 Unity 的内置图层,它们在 VRChat 中的用途,以及用户是否可以在其上放置贴纸。

图层编号图层名称描述可以贴贴纸
0DefaultUnity 游戏对象的默认图层。由 VRChat 的 Avatar Pedestals 使用。✔
1TransparentFX用于 Unity 的 Flare 资源。❌
2IgnoreRaycast如果未提供图层遮罩,Unity 的物理射线检测会忽略此图层。VRChat 的物理射线检测不会忽略此图层。❌
3Item由用户放置到你世界中的 VRChat 物品使用。当你上传世界时,此图层上的任何游戏对象将被移动到图层 0(Default)。❌
4Water由 Unity 的标准资源使用。由 VRChat 的传送门使用。由 VRChat 的镜子使用。常用于 Unity 的后期处理。✔
5UI⚠ 你可能不想使用此图层。Unity UI 默认使用此图层。除非玩家打开 VRChat 菜单,否则 VRChat 的 UI 指针会忽略此图层。除非在相机中启用了'UI',否则 VRChat 的相机会忽略此图层。❌
6reserved6⚠ 避免使用此图层。由 VRChat 保留。当你上传世界时,保留图层上的任何游戏对象将被移动到图层 0(Default)。❌
7reserved7⚠ 避免使用此图层。由 VRChat 保留。当你上传世界时,保留图层上的任何游戏对象将被移动到图层 0(Default)。❌
8InteractiveUnity 和 VRChat 未使用。
使用此图层用于你不希望用户放置贴纸的碰撞器。
❌
9Player用于 VRChat 的玩家,除了本地玩家。❌
10PlayerLocalVRChat 用于渲染本地玩家。人形虚拟形象在不渲染头骨的情况下渲染。❌
11EnvironmentUnity 和 VRChat 未使用。✔
12UiMenu⚠ 你可能不想使用此图层。除非玩家打开 VRChat 菜单,否则 VRChat 的 UI 指针会忽略此图层。❌
13Pickup添加拾取组件时,VRChat 的拾取物默认使用此图层。不与玩家碰撞。❌
14PickupNoEnvironment此图层上的碰撞器仅与'Pickup'碰撞。❌
15StereoLeftUnity 和 VRChat 未使用。❌
16StereoRightUnity 和 VRChat 未使用。❌
17Walkthrough此图层上的碰撞器不与玩家碰撞。✔
18MirrorReflectionVRChat 用于在镜子中渲染本地玩家。
此图层上的渲染器仅在镜子中显示。
此图层上的渲染器不会在 VRChat 的主相机中渲染。
此图层上的碰撞器不会阻挡 VRChat 的射线检测。
❌
19InternalUI⚠ 避免使用此图层。由 VRChat 用于内部 UI 元素,如菜单、铭牌和调试面板。❌
20HardwareObjects⚠ 避免使用此图层。由 VRChat 用于渲染物理硬件的虚拟表示,例如控制器和追踪器。❌
21reserved4⚠ 避免使用此图层。由 VRChat 保留。当你上传世界时,保留图层上的任何游戏对象将被移动到图层 0(Default)。❌
22-30Unity 和 VRChat 未使用。在上传的世界中,VRChat 不会覆盖这些图层的名称和碰撞矩阵。(✔)1
31⚠ 避免使用此图层。由 Unity 的编辑器预览窗口机制使用。(✔)1

贴纸​

贴纸允许 VRChat+ 用户在世界中的 Collider 组件上放置图片。

贴纸不能放置在所有图层上。如果你不希望用户在 Collider 组件上放置贴纸,可以更改其图层。我们建议使用图层 8("Interactive"),因为 VRChat 和 Unity 未使用它。

如果你不希望在任何地方允许贴纸,请在 VRChat 网站上编辑你的世界并禁用贴纸。

物理与图层​

使用物理操作时,最好限制你测试的图层,以避免在保留图层上的物品。同时建议对物理调用传回的任何对象使用 Utilities.IsValid,以确保你没有意外获取"受保护"的对象,这些对象将是 null,可能导致你的 UdonBehaviour 关闭。

这些物理方法最好与 IsValid 配合使用:
  • Physics.Raycast
  • Physics.RaycastAll
  • Physics.RaycastNonAlloc
  • Physics.SphereCast
  • Physics.SphereCastAll
  • Physics.SphereCastNonAlloc
  • Physics.OverlapSphere
  • Physics.OverlapBox
  • Physics.OverlapCapsule
  • Physics.OverlapSphereNonAlloc
  • Physics.OverlapBoxNonAlloc
  • Physics.OverlapCapsuleNonAlloc
  • Rigidbody.SweepTest
  • Rigidbody.SweepTestAll
  • Physics.CapsuleCast
  • Physics.CapsuleCastAll
  • Physics.CapsuleCastNonAlloc
  • Physics.BoxCast
  • Physics.BoxCastAll
  • Physics.BoxCastNonAlloc
  • Collider.Raycast
  • Physics.CheckSphere
  • Physics.CheckBox
  • Physics.CheckCapsule

VRChat 图层的交互阻挡和穿透​

交互(从远处抓取物品、用激光切换 UI 元素)会被大多数 VRChat 图层阻挡。以下图层对交互透明,允许你穿透交互:

  • UiMenu
  • UI
  • PlayerLocal
  • MirrorReflection

用户图层的交互穿透​

默认情况下,用户图层的交互是阻挡的。使用"Interact Passthrough"遮罩来定义对交互透明的图层(允许交互穿透)。请注意,碰撞检测射线的起点在桌面/移动玩家(在玩家胶囊体内)与 VR 玩家(在用户追踪的手部)之间是不同的。这意味着 VR 玩家的手可以穿透碰撞器,即使玩家碰撞器被阻挡。因此,这些碰撞器不会阻挡 VR 玩家的交互,因为手已经穿透了。

Footnotes​

  1. 图层 22-31 默认启用了贴纸功能。你可以通过将它们添加到交互穿透列表来禁用它。 ↩ ↩2