mcpField
U
unity-vrc-world-sdk-3

unity-vrc-world-sdk-3

github.com/niaka3dayo开发3411.0k 次安装6 周前更新
代码仓库

关于 unity-vrc-world-sdk-3

面向使用 World SDK 3 构建 VRChat 世界的创作者,提供场景、组件、性能和发布配置参考。内容按任务组织,并涵盖 SDK 验证、迁移说明及面向 Quest 的设计限制。

主要功能

  1. 01场景与组件设置指南
  2. 02层级与碰撞配置
  3. 03性能和照明参考
  4. 04SDK 构建验证与故障排查
  5. 05世界上传和发布工作流

适用场景

  1. 01设置新的 VRChat 世界场景
  2. 02配置拾取物、座椅或镜面
  3. 03排查 SDK 验证警告
  4. 04为 Quest 性能准备世界

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/niaka3dayo/agent-skills-vrc-udon --skill unity-vrc-world-sdk-3

安装后在 Claude Code 中输入/unity-vrc-world-sdk-3确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

CHEATSHEET.md
LICENSE.txt
assets/templates/
VRC_Pickup_Rigidbody.cs
VRC_Station_Basic.cs
references/
audio-video.md
build-validation.md
components.md
layers.md
lighting.md
performance.md
troubleshooting.md
upload.md

详细介绍

VRChat World SDK 3 指南

目录

章节内容参考资料
场景设置VRC_SceneDescriptor、生成点本文件
组件Pickup、Station、Mirrorreferences/components.md
图层与碰撞图层、碰撞矩阵references/layers.md
性能优化指南references/performance.md
光照光照设置references/lighting.md
音频与视频音频、视频播放器references/audio-video.md
构建验证红色/黄色/白色 SDK 警告references/build-validation.md
世界上传上传工作流references/upload.md
故障排除问题解决references/troubleshooting.md
速查表快速参考CHEATSHEET.md

方法迁移

以下公共方法已重命名,因为未添加前缀且不带参数的公共 UdonSharp 方法仍可通过旧版网络分发调用:

之前之后
ForceDropPickup_ForceDropPickup
IsHeld_IsHeld
IsOccupied_IsOccupied
StopSound_StopSound
SlowUpdate_SlowUpdate

请更新 Inspector 事件字符串、SendCustomEvent* 调用、延迟事件和 nameof(...) 表达式,以及跨行为调用。不提供兼容别名, 因为旧的无前缀别名会重新带来相同的旧版网络暴露风险。


常见错误(绝对不要做)

这些错误会导致世界无声无息地失效、性能灾难或与 Quest 不兼容:

#绝对不要这样做造成的影响应改用
1默认启用镜子(加入世界时处于开启状态)镜子会增加一次代价高昂的场景渲染;具体影响取决于视野、场景、分辨率和设备默认关闭镜子;添加由玩家控制的开关,并在每台目标设备上进行性能分析
2不经性能分析就使用带实时阴影的实时方向光实时阴影的开销取决于场景几何、视野和目标设备,在 Android 上可能占用大量帧时间优先使用烘焙光照贴图和光照探针;保留任何实时阴影前,先在目标设备上进行性能分析
3将重生高度设为等于或高于世界地面玩家重生 → 坠落 → 再次重生 → 无限循环;玩家无法脱困将其设为无法到达的深度(例如:地面位于 Y=0 → 将重生高度设为 Y=-100)
4在新项目中跳过“为 VRChat 设置图层”图层碰撞矩阵默认设置有误——玩家会穿墙,拾取物会穿透地板放置任何碰撞体前,运行 VRChat SDK > Builder > “为 VRChat 设置图层”
5未设置 Android 构建配置就启用后期处理后期处理在 Android 运行时会被禁用,因此制作的效果不会显示,不必要的资源却仍可能增大构建体积使用移除了后期处理的独立 Android 构建配置
6同时放置超过 2 个处于活动状态的视频播放器每个播放器都会增加显著的解码开销;实际使用中,同时运行 >2 个播放器是导致掉帧和音频问题的常见原因在场景开始时禁用多余的播放器;仅启用当前正在播放的播放器
7在 Android 上使用 Cloth,或不经性能分析就添加大量 Unity ConstraintsCloth 在 Android 上已禁用。世界中允许使用 Unity Constraints,但过度使用会显著影响性能从 Android 构建中移除 Cloth;新项目优先使用 VRC Constraints,并对任何大量使用约束的配置进行性能分析
8未完成光照贴图烘焙就上传实时 GI 会产生大量依赖场景的渲染开销,不适合作为未经测量的 Android 备用方案上传前烘焙光照,然后在目标设备上验证效果
9将玩家可行走的表面放在 Default 图层(0)上碰撞矩阵默认设置有误——Avatar 物理碰撞不可靠;玩家可能会穿透几何体所有可行走的几何体、墙壁和地板均使用 Environment(图层 11)
10不经性能分析就为大面积区域设置极高的光照贴图分辨率高分辨率下纹理内存可能大幅增加;这是移动头显发生 OOM 崩溃的常见原因可将 10-20 texels/unit(PC)/ 5-10(Quest)作为实用的起始指南;分析 VRAM 并进行调整——官方指南建议 Quest“保持较低的光照贴图分辨率”
11将 VRC_UIShape 添加到屏幕空间或叠加 CanvasVRC_UIShape 需要使用世界空间 Canvas;其他模式会在 VRChat 中触发 Unity 运行时错误——UI 虽然会显示,但无法交互,世界创建者也看不到错误提示添加 VRC_UIShape 前,将 Canvas > Render Mode 设为 World Space

参考资料加载指南

仅加载任务所需的内容。

任务必须阅读可选不要加载加载理由
从头开始设置新场景components.md、layers.mdupload.mdaudio-video.md、troubleshooting.md碰撞矩阵不易理解;需要提前了解组件依赖项
让物体可抓取(VRC_Pickup)components.mdlayers.mdaudio-video.md、lighting.mdPickup/Rigidbody 的要求未包含在标准 Unity 文档中
为 Worlds 配置 Dynamics(PhysBones、Contacts、Box Contacts、Global Avatar PhysBone Colliders、world VRCPhysBoneCollider 访问)components.mdlayers.md、troubleshooting.md;Udon 代码请使用 unity-vrc-udon-sharpaudio-video.md、lighting.mdDynamics 组件的可用性和 Udon 访问方式受 SDK 版本影响
设置座位(VRC_Station)components.mdlayers.mdaudio-video.md、performance.mdStation 的碰撞体和退出要求是 VRChat 特有的
优化 Quest 的 FPSperformance.md、lighting.mdtroubleshooting.mdaudio-video.md、upload.mdQuest 的限制与 PC 不同;烘焙要求不易理解
添加音频或视频播放器/语音区域(SetVoiceGain、Steam Audio)audio-video.md、components.mdtroubleshooting.mdlighting.md、performance.md选择 AVPro 还是 Unity Video 是 VRChat 特有的问题
配置 WorldQualitySettings、实时探针或 Shadowmask Modecomponents.mdlighting.md;Udon API:unity-vrc-udon-sharpaudio-video.md、layers.md现有的启动设置器和覆盖标志可能会覆盖已设定的画质选项
烘焙灯光/设置光照贴图lighting.md、performance.md—audio-video.md、layers.md光照贴图分辨率和探针位置会影响 Quest 的 VRAM
SDK Build Panel 验证提醒、红色/黄色/白色警告或 Auto Fix 相关问题build-validation.mdupload.md、troubleshooting.mdaudio-video.md、lighting.md提醒级别、构建影响和 Auto Fix 的副作用必须以 SDK 支持的目录为准
上传并发布 Worldupload.mdbuild-validation.md、troubleshooting.mdaudio-video.md、lighting.md上传步骤和验证顺序容易出错,很容易遗漏
排查碰撞或图层问题layers.md、troubleshooting.mdcomponents.mdaudio-video.md、lighting.mdVRChat 的碰撞矩阵与 Unity 默认设置不同
设置和配置镜像components.mdperformance.mdaudio-video.md、upload.md镜像图层遮罩要求是 VRChat 特有的

创建新 World 前——设计决策

这些决策会影响后续的每项选择。请先做出决策,再放置任何组件。

决策选项影响
是否必须支持 Quest?是/否是 → 从第 0 天起就采用 Quest First 理念,而不是事后改造
预计玩家人数?1–8/9–40/40+影响出生点数量、镜像策略和视频播放器上限
主要交互方式?抓取(Pickup)/坐下(Station)/观看(Video)/探索决定哪些 SDK 组件是必需的
灯光方案?烘焙/混合/实时Android 上优先使用烘焙灯光;保留实时灯光或阴影前,先在每个目标设备上进行性能分析
是否有联网对象?无/物理(Pickup+ObjectSync)/状态(UdonSynced)决定开始编写 Udon 脚本前所需的同步架构

设计理念:Quest 优先

如果世界必须在 Android 上运行,就要在调整 PC 版本之前确定这些限制。分别测试每个目标平台。

Android 头显的移动 CPU、GPU、内存和散热预算与 PC 不同,并且会因设备而异:

  • GPU:实时光照、阴影、过度绘制和复杂着色器可能占用大量帧时间
  • 内存:纹理和光照贴图需要与客户端共享有限的系统内存
  • 散热:持续负载可能会降低会话期间可用的性能

分别测量每台目标设备;PC 测试结果无法证明 Android 的性能,单台 Quest 客户端的测试结果也无法预测特定 PC 的帧率。发布前,请使用 Unity Profiler 和官方 Android 内容优化指南。

绝不要只为 PC 优化,再“稍后添加 Quest 支持”——届时,光照、材质和网格密度都已锁定为 PC 画质,而 Quest 移植则需要重做一切。

Quest 优先级联效应——如果必须支持 Quest,那么所有后续决策都必须遵循相应限制:

Quest required? → Yes
  ├── Shaders: World shaders are unrestricted; prefer mobile-compatible shaders and profile custom ones
  ├── Lighting: Baked by default; retain realtime effects only after target-device profiling
  ├── Geometry: Budget approximately 250,000 triangles for the whole world; reduce further when profiling calls for it
  ├── Materials: Minimize unique materials and draw calls; no fixed world upload limit is documented
  ├── Audio: Mono, compressed, limited concurrent sources
  └── Physics: Simplified colliders, minimal Rigidbodies

SDK 版本

当前支持版本/最后验证版本:SDK 3.10.5

从 v4.0.0 起,策略为仅支持最新稳定版 SDK;只有在本仓库验证新的稳定版本后,才会切换支持版本。新发布的稳定版本不会自动获得支持。目前最后验证的目标版本:3.10.5。

下表保留了功能引入历史,供迁移参考。SDK 3.7.1-3.10.4 条目仅供历史参考;它们不是此 Skill 的当前支持版本或验证目标。这是此 Skill 的支持范围,并不代表 VRChat 自身的 SDK 策略。除非参考资料明确标注为历史迁移案例,否则主要生成示例均以 SDK 3.10.5 为目标版本。

SDK新功能状态
3.7.1StringBuilder、Regex、System.Random历史版本
3.7.4持久化 API (PlayerData/PlayerObject)历史版本
3.7.6多平台构建与发布(同时构建 PC + Android 版本)历史版本
3.8.0PhysBone 依赖排序、强制远程对象设为 Kinematic、Drone API历史版本
3.8.1带参数的 [NetworkCallable] 事件、Others/Self 目标、VRCCameraSettings历史版本
3.9.0Camera Dolly API、Auto Hold 简化、VRCCameraSettings 新增功能(CullingMask、GetCurrentCamera)历史版本
3.10.0世界动态系统(PhysBones、Contacts、VRC Constraints)历史版本
3.10.1错误修复和稳定性改进历史版本
3.10.2EventTiming 扩展、PhysBones 修复、着色器时间全局变量历史版本
3.10.3VRCPlayerApi.isVRCPlus、VRCRaycast(头像)、Mirror 渲染顺序修复历史版本
3.10.4VRCTween、盒形 Contacts、全局 Avatar PhysBone Colliders、世界 VRCPhysBoneCollider Udon 访问权限、Data Container 容量 API历史版本
3.10.5WorldQualitySettings、Pickup Outline Renderers、Pipeline Manager 验证;可写入的 VRCQualitySettings 和 Assembly Version Defines → UdonSharp Skill当前支持/最后验证版本

发布时请使用 SDK 3.10.5;迁移项目之前,请根据对应版本的发行说明验证与版本相关的 API。


场景设置

VRC_SceneDescriptor(必需)

每个 VRChat 世界中必须且只能有一个。

[VRCWorld Prefab]
├── VRC_SceneDescriptor (Required)
├── VRC_PipelineManager (Auto-added)
├── VRCWorldSettings (Optional - movement speed settings)
└── AvatarScalingSettings (Optional - avatar scale limits)
关键属性
属性类型描述默认值
SpawnsTransform[]生成点数组描述符位置
Spawn OrderenumFirst/Sequential/Random/Demo(First:始终使用第一个生成点;Demo:生成点位于房间规模的中心)Sequential
Spawn OrientationenumDefault/Align Player With Spawn Point/Align Room With Spawn PointDefault
Respawn Heightfloat重生高度(Y 轴)-100
Object Behaviour At Respawnenum重生/销毁Respawn
Reference CameraCamera玩家摄像机设置参考None
Forbid User Portalsbool禁用用户传送门false
Voice Falloff Rangefloat语音衰减范围-
Interact PassthroughLayerMask交互直通层Nothing
Maximum Capacityint最大玩家数量(硬性限制)-
Recommended Capacityint推荐玩家数量(UI)-
参考摄像机用法
// Usage:
// 1. Adjust Near/Far clipping (recommended for VR: 0.01 ~ 1000)
// 2. Apply Post Processing effects
// 3. Set background color

// ⚠️ MUST disable the Camera component after configuring — an active Reference Camera
//    renders a second viewport. VRChat reads only the camera settings, not its output.
// Assign the configured (disabled) Camera to VRC_SceneDescriptor > Reference Camera.
生成点设置
// Spawn points are empty GameObjects assigned to VRC_SceneDescriptor > Spawns array.
// Players enter facing the Z+ direction of the spawn Transform.

// VRChat-specific requirements:
// - At least 2-3 spawn points (for simultaneous joins — single spawn causes overlap)
// - Place slightly above the floor (~0.1m) to avoid floor collision on spawn
// - Keep clear of obstacles (VR player guardian area is larger than their avatar)
// - Account for VR guardian boundaries — desktop player sizes differ from VR
必需设置检查清单
□ Exactly one VRCWorld Prefab exists in the scene
□ At least one Transform set in Spawns
□ Respawn Height set to an appropriate value (well below the floor)
□ Reference Camera configured for clipping distances (for VR)
□ Layer/Collision Matrix correctly configured
□ "Setup Layers for VRChat" has been executed

组件

务必阅读 references/components.md(约 800 行),然后再配置以下任何 VRC 组件。请完整加载 — 依赖项要求和 Udon 事件钩子分散在全文各处。 不要加载:references/audio-video.md(除非任务涉及音频/视频组件)、references/lighting.md。

组件必需元素用途SDK
VRC_SceneDescriptor-世界设置(必需)-
VRC_PickupCollider + Rigidbody可抓取物体-
VRC_StationCollider可坐下的位置-
VRC_ObjectSyncRigidbody自动同步 Transform/物理状态-
VRC_MirrorReflection-镜子(⚠️ 开销较高)-
VRC_PortalMarker-通往其他世界的传送门-
VRC_SpatialAudioSourceAudioSource3D 音频-
VRC_UIShapeCanvas (World Space)Unity UI 交互-
VRC_AvatarPedestal-Avatar 显示/切换-
VRC_CameraDolly-摄像机轨道3.9+
VRCCameraSettingsNone (static API)从 Udon 读取摄像机信息3.8.1+
VRC_ObjectSync 与 UdonSynced 对比
场景VRC_ObjectSyncUdonSynced 变量
可投掷物体/物理效果✅ 推荐❌
仅状态/复杂逻辑❌✅ 推荐

SDK 3.8.0+:Force Kinematic On Remote — 使非所有者客户端上的 Rigidbody 设为运动学状态,防止出现意外的物理行为。


层与碰撞

VRChat 保留层
Layer #NamePurpose
0Default通用对象
9Player远程玩家
10PlayerLocal本地玩家
11Environment环境(墙壁、地板)
13Pickup可抓取对象
14PickupNoEnvironment不与环境碰撞的可拾取对象
17Walkthrough可穿过的对象
18MirrorReflection仅用于镜面反射
22-31User Layers可供自定义使用
层设置步骤
1. VRChat SDK > Show Control Panel
2. Builder tab
3. Click "Setup Layers for VRChat"
4. Collision Matrix is automatically configured

必须阅读 references/layers.md,以设置碰撞或调试物理效果。Unity 默认的碰撞矩阵与 VRChat 正确的配置不同,因此务必进行核实。 不要加载:references/audio-video.md、references/upload.md。


性能

性能标准

根据支持的设备、代表性场景和预期玩家数量,设定性能目标。在分析性能前,为每个构建目标记录帧时间或帧率目标。VRChat 没有为世界上传设定统一的 FPS 门槛。

初始预算
项目建议原因
镜子1 个,默认关闭以 2 倍渲染整个场景
视频播放器建议 1-2 个解码开销;没有文档说明的硬性上限
实时光照默认烘焙只有在目标设备上分析性能后,才保留实时灯光或阴影
光照贴图烘焙并验证Android 的主要光照路径
Quest/Android 限制
组件PCQuest
Dynamic Bones✅❌ 已禁用
Cloth✅❌ 已禁用
Post-Processing✅❌ 已禁用
Unity Constraints✅✅ 可在世界中使用;需分析性能开销
实时灯光✅⚠️ 开销较大;仅在有设备测试依据时保留
性能优化工作流
瓶颈类型主要指标参考
CPU 瓶颈脚本耗时高、物理开销大performance.md §优化工作流
GPU 瓶颈绘制调用、过度绘制、着色器复杂度performance.md §优化工作流
内存VRAM 使用量、纹理大小、网格数量performance.md §优化工作流

必须阅读:performance.md,在优化前先进行测量,然后针对最大的瓶颈进行优化;Quest 优化还需阅读 references/lighting.md。 不要加载:references/audio-video.md、references/upload.md。


光照

烘焙光照(默认)
✅ Recommended settings:
├── Lightmapper: Progressive GPU
├── Lightmap Resolution: 10-20 texels/unit (PC) / 5-10 (Quest)
├── Light Mode: Baked by default; use Mixed/Realtime only when the effect is necessary and measured
└── Light Probes: Place along player paths

❌ Avoid:
├── Realtime lights (dynamic shadows)
├── High-resolution lightmaps (memory consumption)
└── Excessive Reflection Probes

必须阅读 references/lighting.md,以配置光照贴图或设置光照探针位置。 不要加载:references/audio-video.md、references/upload.md、references/layers.md。


音频与视频

VRC_SpatialAudioSource

为每个世界中的 AudioSource 配置 VRC_SpatialAudioSource:单独的 AudioSource 会触发 VRChat SDK Build Panel 警告。请有意添加配套组件,不要默认盲目使用 Auto Fix,也不要覆盖现有的 VRC_SpatialAudioSource 值或经过调校的 AudioSource 曲线,除非用户有此要求。

属性说明基准值 / 安全保留说明
Gain音量增益(0-24 dB)10 dB 是常见值/默认值;仅为消除警告而添加时,使用 0 dB 以保留原有响度
Near衰减起始距离0m,除非声音需要有意设置近场效果
Far衰减结束距离与现有 maxDistance 或预期的可听范围一致;不要盲目使用默认值/Auto Fix 范围
Volumetric Radius声源扩散范围点声源设为 0m;宽广声源则有意设置
Enable Spatialization3D 定位有意设置为 2D/全局的音频设为 false;制作的 3D 音频设为 true

保留现有 AudioSource 时,请保留 volume、spatialBlend、rolloffMode、maxDistance 和自定义曲线;Gain 使用 0 dB;对于经过调校的 3D 衰减,启用 Use AudioSource Volume Curve;Far 与现有 maxDistance 或预期的可听范围一致;除非现有 minDistance/Near 值是有意设置的,否则 Near 保持为 0m。

Video Player Selection
功能AVProUnity Video
直播流✅❌
编辑器预览❌✅
YouTube/Twitch✅❌
Quest 支持✅✅

必须阅读 references/audio-video.md,了解 VRC_SpatialAudioSource 或视频播放器配置。 可选阅读:连接音频/视频组件时,阅读 references/components.md。 不要加载:references/lighting.md、references/performance.md。


世界上传

上传步骤
1. Check Validation
   └── VRChat SDK > Build Panel > Validations

2. Build & Test (local testing)
   └── "Build & Test New Build"
   └── Supports multi-client testing

3. Upload
   └── "Build and Upload"
   └── Set Content Warnings
   └── Set Capacity

4. Publish settings
   └── Configure public/private on the VRChat website
上传前检查清单
□ VRC_SceneDescriptor × 1
□ Spawns configured
□ Respawn Height appropriate
□ Layer/Collision Matrix verified
□ Light baking complete
□ Mirror default OFF
□ Project-defined frame-time or frame-rate target met in representative scenes and player counts
□ No Validation errors
□ Content Warnings set
□ Capacity set

运行 Build & Upload 前,必须阅读 references/upload.md。请先确认上传前检查清单中的所有项目。 当用户询问 SDK Build Panel 验证、红色/黄色/白色警告、Auto Fix 或复制的验证消息时,必须阅读 references/build-validation.md。 不要加载:references/audio-video.md、references/lighting.md。


故障排除

快速路由

确定症状类别,然后跳转到对应的参考章节:

症状类别常见原因参考
玩家穿过墙壁/地板未运行图层设置;几何体未设置为 Environment (11)troubleshooting.md §Layer & Collision
无法抓取/拾取无效缺少 Collider、Rigidbody 或 VRC_Pickup 组件troubleshooting.md §Component
对象不同步/弹回原位缺少 VRC_ObjectSync 或所有权未转移troubleshooting.md §Networking
无法坐下/穿过 Station缺少 Collider;需要调整 Station Enter Player Locationtroubleshooting.md §Component
镜子没有反射图层遮罩缺少 Player/PlayerLocal/MirrorReflectiontroubleshooting.md §Component
构建/上传失败缺少 SceneDescriptor、脚本错误、图层警告troubleshooting.md §Build
性能问题Mirror 已开启、实时灯光、光照贴图未烘焙performance.md
在编辑器中正常,但在 VRChat 中失败编辑器 Play ≠ SDK 运行时;请使用 Build & Testtroubleshooting.md §Editor
UI 可见但无法点击VRC_UIShape 位于 Screen Space / Overlay Canvas 上(参见 NEVER #11)troubleshooting.md §Editor

必须阅读 references/troubleshooting.md,以诊断任何问题。对于非故障排查任务,请勿加载。


相关技能

对于 C# 脚本、网络同步和 UdonSharp 事件实现,请使用 unity-vrc-udon-sharp 技能。


模板(assets/templates/)

用于常见 SDK 组件模式的入门模板。仓库检查涵盖静态检查;使用前请将模板导入目标 SDK 项目,编译并运行 Build & Test。请调整 Inspector 字段,并扩展事件存根以适配你的世界。

模板用途
VRC_Pickup_Rigidbody.cs带 Rigidbody 的 VRC_Pickup——OnPickup/OnDrop/OnPickupUseDown/OnPickupUseUp 事件、所有权转移、音频反馈
VRC_Station_Basic.csVRC_Station 控制器——OnStationEntered/OnStationExited 事件、PlayerMobility、强制弹出 API

参考资料

文件内容约行数
references/components.md所有组件详情、组件白名单、Dynamics for Worlds、仅限编辑器的排除项(EditorOnly 标签 / IEditorOnly)800+
references/layers.md层与碰撞230+
references/performance.md性能优化700+
references/lighting.md光照设置400+
references/audio-video.md音频与视频600+
references/build-validation.mdSDK 3.10.5 Build Panel 红色 / 黄色 / 白色验证警报目录、安全修复、Auto Fix 副作用180+
references/upload.md上传流程300+
references/troubleshooting.md故障排除指南500+
CHEATSHEET.md快速参考200+

评论

支持 Markdown