44. 发布你的世界
Build & Test 跑过很多次,地板平、出生点对、性能稳。Builder 面板上面那个按钮一直是熟悉的 Build & Test。它旁边还有一个按钮,叫 Build & Publish for Windows。
这一下按下去,世界会被打包上传到 VRChat 服务器,拿到一个永久的 World ID(世界唯一编号),进入 Community Labs。任何打开了 Community Labs 选项的玩家都能在世界列表里搜到它。同一个 World ID 不会再变,下次更新就是覆盖。
「上传」这件事不是单向的:可以撤回、可以改可见性、可以更新版本。但 World ID 一旦发出来就回不去了,已经收藏了的玩家不会因为再上传一次就丢失收藏。所以第一次上传等于把世界正式钉到 VRChat 网络上。这一章把第一次钉之前要对齐的几件事过一遍。
第一节:上传前的硬性清单
Section titled “第一节:上传前的硬性清单”VRChat 官方 Submission 页面和社区共识合在一起,是这样一份清单。第八部讲过的项目这里只回顾不展开:
| 项 | 标准 | 来自哪一章 |
|---|---|---|
| Console 没有红色错误 | 编译错误、Missing Reference 全清 | 第 40 章 |
Build & Test 跑过 | 单人本地能进、能走、出生点对 | 第 5 章、第 41 章 |
| 多人 + 真实头像测过 | 邀请 3-5 个朋友进过一次 | 第 38 章、第 41 章 |
| 性能预算达标 | PC 单人出生点 90 FPS、Quest 72 FPS | 第 38 章 |
| 烘焙了 Occlusion Culling(遮挡剔除)和 Lightmap(烘焙光贴图) | Static 都打勾、Bake 都跑过 | 第 36 章、第 38 章 |
| 镜子默认关、玩家可开关 | 镜子开销在所有人头上,默认状态保守 | 第 16 章、第 38 章 |
| 有 Backup | 项目目录已 commit / 备份 | 第 42 章 |
| 素材授权清楚 | Booth / Asset Store 模型的商用 / 二次发行权限确认过 | 第 43 章 |
| Quest 版(如果做了)单独构建过 | Android 切换之后 Build 通过 | 第 39 章 |
这里的每一项都不是上传那一刻才查的事。它们是前面八部攒下来的预算。这一章只把它们汇到一张纸上,方便最后扫一眼。
第二节:VRC Scene Descriptor 的关键字段
Section titled “第二节:VRC Scene Descriptor 的关键字段”世界根物体上挂的 VRC Scene Descriptor 是 SDK 识别这个 Unity 场景为「VRChat 世界」的核心组件。第 5 章第一次接触它的时候只填了 Spawns。这一章上传前把它的所有重要字段过一遍。
打开 VRC Scene Descriptor 的 Inspector,照官方组件文档(creators.vrchat.com/worlds/components/vrc_scenedescriptor/)抓重点字段:
VRC Scene Descriptor├─ Spawns (玩家入场时的出生 Transform 数组)├─ Spawn Order (First / Sequential / Random / Demo)├─ Spawn Orientation (Default / Align Player With Spawn Point /│ Align Room With Spawn Point)├─ Reference Camera (拍世界的相机,决定摄影模式默认参数)├─ Respawn Height -Y (玩家掉到此 Y 值之下,自动重生)├─ Object Behaviour At Respawn (Pickup 跟着重生 / 销毁)├─ Forbid Free Modification (是否禁止非 Master 玩家拖动未同步的物体)├─ Forbid User Portals (是否禁止玩家在世界里从菜单开传送门)├─ User Custom Voice Falloff … (玩家语音衰减距离的自定义)├─ Interact Passthrough (哪些 User Layer 上的交互可以穿透)└─ Dynamic Materials / Prefabs (已废弃,SDK3 不再使用)字段名以当前官方文档对齐。SDK2 时代教程里看到的 Layer Collision Matrix、Forbid Spawning Avatars、Rendering Settings 这种字段在 SDK3 的 Scene Descriptor 上不再以这种形式存在——Layer 设置走全局 Project Settings,渲染设置走 Lighting / Camera。
第 5 章只填过 Spawns。现在每一项都该看一眼。
Spawns(出生点)
Section titled “Spawns(出生点)”Spawns 是一个 Transform 数组。Spawn Order 决定多人进场时怎么分配:
First:所有玩家都从第 0 个 Spawn 进。开发期最稳。Sequential:第一个玩家用第 0 个 Spawn,第二个用第 1 个,转一圈。适合「每个玩家有自己的位置」的世界(剧场、办公室)。Random:随机。多数 Chill 世界用这个。Demo:Spawn 点代表 room-scale 的中心——离 room 中心一米的人,就在 spawn 一米外落地。VR 房型对齐场景偶尔用。
Spawn Orientation:
Align Player With Spawn Point:玩家朝向跟 Spawn Transform 的 Forward 一致。Align Room With Spawn Point:把整个 VR 房间空间对齐 Spawn Transform。Default:当前等同于Align Player With Spawn Point(官方文档当前如此说明,SDK 升级时可能改默认)。
第 31 章讲过出生点朝向的影响:朝墙的出生点会让玩家三秒内就退。Align Player With Spawn Point 是一个相对稳的默认。
Respawn Height Y
Section titled “Respawn Height Y”玩家掉到这个 Y 值之下,会被传送回 Spawn。这个值要比世界地板低很多,比如地板在 Y=0,Respawn Height Y 设 -50。
设得太接近地板(比如 -1)会出 bug:玩家蹲下走台阶、跳进低洼处都可能触发重生。
Object Behaviour At RespawnHeight 决定 Pickup 物体掉下去之后怎么办。多数情况选 Respawn:物体跟玩家一起回到原位。
Reference Camera
Section titled “Reference Camera”拖一个相机到这里。VRChat 摄影模式(玩家按 K)会用这个相机的设置作为默认。Post-processing、雾、Skybox 都跟这个相机走。
世界里多数时候已经有一个主相机,把它拖进去就行。没有主相机的话新建一个空 GameObject,加一个 Camera 组件,摆到一个能拍到全场的位置。
Forbid User Portals
Section titled “Forbid User Portals”VRChat 玩家可以在任何世界里开传送门到另一个世界。Chill 世界、Gallery、剧场这种「不希望被陌生人开门拉走」的场景,可以勾上禁止。
游戏世界、活动世界、Hub 世界一般留默认(允许)。
Capacity(容量)
Section titled “Capacity(容量)”VRC Scene Descriptor 上没有 Capacity 字段。容量在上传时填,跟世界元数据一起存到服务器。当前 SDK 上传面板把它拆成两个字段:
| 字段 | 含义 |
|---|---|
Maximum Capacity | 实例硬上限。达到这个数后新玩家加不进来;instance creator / world creator / group owner 等少数角色仍可进入。 |
Recommended Capacity | 推荐人数。公开实例达到这个数后,VRChat 会从公共实例列表里把它隐去;持有直接邀请链接的玩家在某些情况下仍能进。 |
合理范围(先填 Recommended,再填 Maximum,Maximum 一般 ≥ Recommended 一些):
| 世界类型 | Recommended | Maximum |
|---|---|---|
| Chill / 小屋 | 8 - 16 | 16 - 24 |
| Social Hub | 24 - 40 | 32 - 64 |
| Game World(小型) | 4 - 8 | 8 - 16 |
| Event World(演出) | 40 - 60 | 60 - 80 |
| Tool World(个人用) | 2 - 4 | 4 - 8 |
定容量的原则:第 38 章测试过的「同时多少人进来还能跑」就是 Recommended 的真正上限。Recommended 写 32 但性能撑不住 32 人,等于把人引到一个会卡的实例里。Maximum 是「最多容忍多少人挤进来」,超出 Recommended 不至于直接把人挡门外,但官方会停止把这个实例继续推荐给新人。
第三节:SDK Builder 的发布流程
Section titled “第三节:SDK Builder 的发布流程”VRChat SDK → Show Control Panel → Builder 标签页。
切到正确的 Platform Target:
Platform Target├─ ● Windows (PC 构建,先做这个)├─ ○ Android (Quest 构建,PC 上线之后再切过来发一次)└─ ○ iOS (iOS 构建,新平台)Builder 面板会先扫一遍场景,把问题列在上方。常见问题:
| 问题 | 含义 | 怎么办 |
|---|---|---|
A VRC Scene Descriptor is required | 场景里没有 VRC Scene Descriptor | 找根物体加上去 |
No spawns set | Spawns 数组是空的 | 拖至少一个 Transform 进去 |
Compile errors detected | 有 C# 编译报错 | 回 Console 修红字 |
Reference Camera missing | 警告,不阻塞 | 拖一个相机进去;不填也能上传 |
Mobile incompatible shaders | Quest 平台用了 PC 限定 Shader | 换成 VRChat/Mobile 系列 |
把所有阻塞性(红色)的修完,剩下的黄字警告自己判断要不要管。
确认无阻塞错误后,下方会出现 Build & Publish Your World Online 按钮(早期 SDK 版本叫 Build & Publish for Windows)。这一步开始:
- 在 Builder 面板的 World 区先把元数据填好(Name、Description、Capacity、Tags、Thumbnail、Visibility 等,第四节展开)。
- 点
Build & Publish Your World Online。 - SDK 把场景打包成 VRChat 世界资源(一个
.vrcw文件,本地缓存到Temp/目录)。 - 打包完成后会要求登录 VRChat(如果还没登过),登录后直接上传。
第一次上传可能要等几分钟(首次构建加上传都是冷启动)。后续更新版本就快得多。
第四节:填元数据
Section titled “第四节:填元数据”SDK 当前版本里这些信息直接在 Builder 面板的 World 配置区填,跟 Build 按钮在同一页。字段大致是:
┌─ World ──────────────────────────────────────────┐│ Name : [ ] ││ Description : [ ] ││ Maximum Capacity : [32 ] ││ Recommended Capacity: [16 ] ││ Content Warnings : [ ... ] ← 见下文 ││ Tags : [ ... ] ││ World Debugging : [ ] 允许其他玩家调试 Udon ││ Thumbnail : [选择一张缩略图] ││ Visibility : ( ) Private ( ) Friends ││ ( ) Group ( ) Public │└──────────────────────────────────────────────────┘ [Build & Test] [Build & Publish Your World Online]每一栏的注意事项:
Name(名称)
Section titled “Name(名称)”- 12-30 字之间最稳。太短在世界列表里没辨识度,太长会被截断。
- 含「VRChat」「Official」「Test」这类词的标题会被搜索算法降权或误判。
- 如果世界主题是头像,标题里必须含
avatar/avatars/avi/avis,否则不会被归到 Avatar World 类别。
Description(描述)
Section titled “Description(描述)”- 第一句话出现在世界列表的预览里,把核心体验放第一句。
- 后面段落给:玩法 / 特色、推荐人数、是否支持 Quest、致谢。
- 链接到外部 Discord / Twitter 是允许的,多数玩家也通过 Description 找回创作者。
Image(缩略图)
Section titled “Image(缩略图)”- 社区推荐
1200×900像素(4:3)。比例错了 SDK 会自动裁剪。 - 用世界里能看到的真实画面。Photoshop 拼贴或外部素材会让玩家进来发现「跟图不一样」,VRChat 公开提交规则里明确写不能用误导性预览图。
- 第一张图决定多数点击:玩家在世界列表里大都先看图再读名字。
Tags(标签)
Section titled “Tags(标签)”VRChat 标签系统按世界类型粗分:game、avatar、chill、event、social、gallery 等。在 SDK 上传面板里勾选与世界实质相符的几个。
VRChat 的 Submission 文档里专门写了一条:滥用标签骗曝光会被处罚。一座 Chill 世界硬贴 game 标签,后台会直接移除标签或对账号做处罚。Tags 是 SEO(搜索优化)工具,不是流量作弊工具。
Visibility(可见性)
Section titled “Visibility(可见性)”Private:只有自己 + 邀请的人能进。第一次上传选这个最稳,先自己跑一遍。Friends:好友可见。第二轮,让朋友进来打 bug。Group:所属群组成员可见。社群运营场景。Public:发布到 Community Labs。这是「上架」的那一下。
关于 Public
Section titled “关于 Public”按了 Public 之后,世界进入 Community Labs。下一节展开。
填完,勾下方的同意条款,点 Upload。等几分钟,控制面板会显示上传成功,并给出世界 URL。
第五节:Community Labs 是什么
Section titled “第五节:Community Labs 是什么”Public 上传完之后,世界不会立刻出现在所有玩家的世界列表里。它先进 Community Labs。
Community Labs 是 VRChat 设的一个预审池:
- Opt-in(主动开启)机制:只有在 VRChat 设置里主动勾选
Show Community Labs的玩家,才能搜到 Labs 里的世界。多数老玩家会勾。 - 预审性质:Labs 里的世界进入时会有一行黄字警告「这个世界尚未审核,可能性能不佳或包含不当内容」。
- 每周一次:每个账号每 7 天只能往 Community Labs 投放一座新世界。已经在 Labs 里的世界更新版本不受这个限制。
Labs 阶段的世界数据正常累积:访客数、收藏数、停留时间都被 VRChat 后台记录。
经过一段时间(VRChat 没有公开具体阈值,社区观察大致是几天到几周,跟访客数和性能表现相关),世界自动晋升 Public。Public 之后,所有玩家都能在常规世界列表里搜到它,进入时不再有黄字警告。
第六节:会被退回或下架的几条硬线
Section titled “第六节:会被退回或下架的几条硬线”VRChat 官方 Submission 页面列了几条硬线,违反会被从 Public 或 Labs 移除。第 43 章已经讲过素材合规,这里专挑发布相关:
占位头像欺骗
Section titled “占位头像欺骗”头像世界(Avatar World)里展示的头像必须跟用户最终下载到的是同一个。社区里的常见骗术是上传时摆「干净头像」让世界先公开,公开之后再换成违规头像。
VRChat 抓到这种行为的处罚(按官方公开提交页):该账号往 Community Labs 提交新世界的能力会被暂停一段时间,重复违规会升级为应用内处罚(in-app moderation action)。具体时长官方没公开数字。
世界包大小有官方原话的软建议:Try to keep your worlds under 200MB。超过这个值不会被自动拒绝,但运营可能要求你缩减并临时把世界从 Public 移除。Quest 版的硬上限是 100 MB(第 39 章讲过)。
文件大的常见原因:未压缩纹理、未清理的导入素材、Lightmap 分辨率过高。第 38 章和第 43 章讲过怎么压。
性能严重不达标
Section titled “性能严重不达标”VRChat 官方提交页没有给出明确的 FPS 硬数字,但反复强调「不可让世界严重影响玩家性能」、「Avatar Pedestal 上的头像必须 reasonably optimized」。社区长期共识是 VR 单人出生点至少 45 FPS 算底线,长期低于这个数的世界容易被运营关注、被要求缩减。
实际上 45 FPS 只是底线。第 38 章讲的 90 FPS(PC)/ 72 FPS(Quest)才是体验稳的目标。
TOS(服务条款)/ 社区准则违规
Section titled “TOS(服务条款)/ 社区准则违规”世界里的视频、音频、模型不能违反 VRChat 服务条款(具体见 hello.vrchat.com/legal)。常见违规类型:
- 受版权保护内容未授权使用(电影片段、未授权音乐)。
- 含露骨或违规内容(成人 / 仇恨 / 骚扰),无论是否「标注过」都不可上传。
- 误导性宣传(标题、描述、缩略图跟实际世界完全不符)。
镜子和视频播放器没默认关
Section titled “镜子和视频播放器没默认关”软规定,但 VRChat 的优化指南反复提:默认开启的镜子或视频播放器会被标记。镜子默认开 = 玩家进世界帧率立刻减半,对 Quest 玩家几乎是无法体验。提交前确认所有镜子和视频播放器有「默认关 + 玩家开关」逻辑。
第七节:上传完去验证一遍
Section titled “第七节:上传完去验证一遍”Builder 面板提示上传成功后,回到 VRChat 客户端:
Esc→Worlds→Mine,能看到刚上传的世界。- 确认缩略图、名称、描述都对。
- 启动一个 Friends Only 实例进去,扫一遍:
- Spawn 落点对,朝向对。
- 灯亮、声音响、地板能踩。
- 关键交互(按按钮、坐椅子、传送门)能用。
- 镜子默认是关的。
- 退出去,从
Worlds列表搜自己的世界名,看能不能搜到。 - 在网页
vrchat.com找到这座世界,看 World ID、上传时间、容量都对。
如果有不对的地方:在 SDK 里改完场景,再次 Build & Publish 就是更新(不会生成新 World ID,玩家收藏不丢)。
第一次上传出 bug 的概率很高,第二次更新前最好先 Build & Test 在本地确认改对了。线上更新的版本会立刻替换 Public 实例里的内容(玩家退实例再进就是新版本),出错代价比 Build & Test 阶段大得多。
第八节:PC 版上线后再发 Quest 版
Section titled “第八节:PC 版上线后再发 Quest 版”第 39 章讲过 PC 和 Quest 是同一个 World ID 上的两份不同构建。流程是:
- PC 平台
Build & Publish完成,世界已上线。 - SDK Control Panel 把
Platform Target切到Android。 - Unity 重新导入资源(这一步可能要等几分钟到十几分钟)。
- Builder 扫一遍,列出 Android 平台的兼容性问题(Shader 不支持、纹理过大、Lightmap 模式错)。
- 修完之后再
Build & Publish。 - 这一次上传的是同一个 World ID 的 Quest 版本,VRChat 后台会自动把两个平台的版本关联起来。
完成后回 VRChat 客户端确认世界页面上有 PC 和 Android 两个标识。Quest 用户进世界会自动加载 Android 版,PC 用户进世界加载 Windows 版,互相能在同一个实例里见到。
第九节:发布之后下一步
Section titled “第九节:发布之后下一步”世界上线之后头几小时到几天会出现一些事:
- VRChat 后台开始累积访客数据。
- Community Labs 的 opt-in 玩家可能逛进来留收藏。
- 自己的社群(Discord / 推特 / 朋友圈)里发出公告,第一波访客来。
- Bug 报告开始进来:有人发现某个交互不对、某个材质在 Quest 上是粉红色、某个出生点会卡进墙。
第 46 章会专门讲怎么应付这一周。这一章只到「点了 Upload,世界出现在 VRChat 上」。
自己改两组发布配置
Section titled “自己改两组发布配置”世界已经能正常运行的前提下:
- 把 Visibility 设成
Friends,按 Build & Publish 上传一次。在 VRChat 客户端里邀请 1 - 2 个朋友进来,让他们走一遍主流程,记录下他们卡住或迷路的地方。再把这些反馈做进下一个版本,然后再上Public进 Community Labs。 - 第二次上传时,只改世界 Description(在 VRChat 网站上),不改场景。观察 World ID 是否保留、版本号是否变化、玩家收藏是否还在。这能让发布元数据和场景内容这两条线在脑子里彻底分开。
一份发布前最后扫一眼的清单
Section titled “一份发布前最后扫一眼的清单”- Console 没有红色错误
-
Build & Test单人通过 - 多人 + 真实头像测过
- PC 出生点 90 FPS / Quest 72 FPS(社区底线建议 ≥ 45 FPS)
- Occlusion Culling 已烘
- Lightmap 已烘
- 镜子和视频播放器默认关、有开关
-
VRC Scene Descriptor的 Spawns / Respawn Height / Reference Camera 都填 - 第一次上传 Visibility 设
Private或Friends - World Name / Description / Image / Tags 都准备好
- Maximum Capacity / Recommended Capacity 跟实测多人帧率一致
- Quest 版(如果做了)的 Shader / 包大小 / 纹理符合 Android 限制
- 项目已 commit / 备份