24. Tool World,做一个好用的工具
VRChat 上有一些世界从来不出现在「最热」榜单,但创作者群体里口耳相传。各种 Avatar Testing Chamber、Pumkin Avatar Tools 配套的测试场、VRLabs 的 Avatar 工具链,还有专门的灯光预览间、配色实验台、动作录制间。它们的样子跟前面六章讲的世界都不一样:没有氛围设计、没有故事、没有规则,房间里都是 UI 面板、镜子、参数滑动条、各种校准用的色卡和参考物。
这一章把 Tool World(提供实用功能的空间)这一类拎出来。它的设计逻辑跟前面六章几乎相反:把心力压在「能不能高效率地完成一项任务」上,氛围、停留时间、视觉冲击都让位。这是 VRChat 世界类型里最「反 VRChat」的一类,也是创作者社群最依赖的一类。
这类世界的核心是「让用户高效完成一项具体任务」
Section titled “这类世界的核心是「让用户高效完成一项具体任务」”Tool World 评判标准朴素到工具书一样:用户进来想做的事,能不能更快、更稳、更准地完成。
具体来说几件:
- 任务边界要清晰。这个世界是干什么用的?「测试 Avatar 在不同光下的样子」、「调一套衣服的配色」、「学一段舞蹈动作」。一句话讲不清的就不是好工具。
- 进来到能用要快。Tool 用户进来是为了做事,不是为了体验。出生点直接放在工具入口,省掉「氛围走廊」式的过渡。
- UI 是核心。这里指真正的功能控件:滑动条、按钮、文本框、下拉菜单、数据显示。Tool World 比其他类型世界的 UI 复杂十倍。
- 状态要可控。一个 Avatar 测试间里灯能调亮调暗、镜子能切角度、背景能换场景,这些状态都要在玩家手边。最好支持「保存预设」(结合 PlayerData,下次进来还是上次的设置)。
- 稳定比花哨重要。Tool World 不能崩。一个调到一半的配色因为世界 bug 重置,用户会立刻换工具。
跟前面六章比,Tool World 的 user 是「creator」,而非随意逛进来的玩家。创作者用工具的耐心阈值比游玩的耐心阈值低得多:能干就用,不能干就换,没有「再给一次机会」的余地。
用户走进来在期待什么
Section titled “用户走进来在期待什么”Tool World 的用户期待非常工程化:
- 直接进入工具。出生点直接是工具的「主操作位」,省掉片头动画、欢迎词、进门 Trigger 的「您好欢迎来到 X」这一类。
- 看见所有控件。控件要在视野里、要标清楚、要状态可见(开关是开还是关、滑动条当前值多少、当前选了哪个选项)。
- 可控的环境变量。如果是 Avatar 测试间,要能调灯光(不同色温、不同强度、Day / Night / Office / 户外)、可换背景(不同墙色 / 不同纹理 / 纯色对照)、可切相机(自拍角度 / 全身镜 / 局部特写)。
- 能保存设置。下次进来还是用过的状态。
- 多人不打扰。Tool World 多数时候单人用,偶尔需要给朋友看下「我做的 Avatar 在你那边长什么样」。两种使用场景都要支持。
- 手册要简洁。功能复杂时要有内置说明。说明本身要克制:滑动条上方一句话、按钮旁边一行 tooltip 这种密度,10 页文字 Manual 在 VR 里几乎不会被读完。
期待里完全不存在的:「氛围」、「故事」、「探索」、「机关」、「彩蛋」。这些在 Tool World 里反而是干扰。
设计上最容易翻车的几堵墙
Section titled “设计上最容易翻车的几堵墙”按踩坑频率排:
UI 在 World Space 里太小
Section titled “UI 在 World Space 里太小”VRChat 的 UI 必须 World Space(不支持 Screen Space Overlay)。按桌面端的尺寸做 UI 是常见的失误:4 像素文字、紧凑的按钮间距、密集的下拉菜单。在 VR 里几乎看不清。
VR 友好的 UI 要:
- 文字物理高度至少 0.04 米(Scale 1 时单位约 0.04),按钮高度至少 0.08 米。
- 控件之间间距足够,VR 玩家点选不会误触。
- 重要状态用颜色 + 图标 + 文字三重表达(视力 / 色觉差异下都看得清)。
- 字体优先无衬线(Sans-serif),衬线字体在小尺寸下糊。
第七部第 34 章会展开 World Space UI 的具体做法。Tool World 的 UI 比其他世界都更精细。
控件的反馈不够明显
Section titled “控件的反馈不够明显”按一个按钮没有任何反馈,用户会不确定「我按了吗」。一个滑动条拖动时数值不实时显示,用户不知道现在调到哪。
通用做法:
- 按钮:按下时颜色变化(高亮 → 按下色 → 恢复),同时播一个轻微的 click 音效。
- 滑动条:实时显示数值(在滑块上方或一侧)。
- 开关:开 / 关用不同颜色(如绿 / 灰),同时改变形状(向左 / 向右)。
- 下拉菜单:当前选项要醒目,可选列表用足够间距。
UI 反馈跟 Game World 的反馈是同一类需求,但 Tool World 对精度要求更高(Game 的反馈是「让玩家知道发生了什么」,Tool 的反馈是「让用户精确调到想要的值」)。
性能预算被环境占满
Section titled “性能预算被环境占满”Tool World 的核心使用场景:用户穿着自己的 Avatar 进来测试。Avatar 通常很重(5 万到 30 万顶点不少见,加上动态骨骼、Shader 参数、表情系统)。
如果 Tool World 自身又做得重(精致背景、复杂光照、多 RenderTexture),加起来会导致 Avatar 在工具里看到的帧率比实际世界还低。测试结果不准。
Tool World 的性能预算要刻意低:
- 背景几何尽量简单(纯色墙、几何块)。
- 光照用静态烘焙,避免实时光(除非这个工具就是要测实时光)。
- Shader 用 VRChat 默认 Standard,不引入复杂自定义 Shader。
- 不放无关的 AudioSource、不放 Particle System。
让世界尽量「轻」,给 Avatar 留出预算。
用户调好一组灯光 / 背景 / 镜头,下次进来全部重置。每次都要重调一遍,会让用户烦到再也不来。
VRChat 的 PlayerData API(VRC.SDK3.Persistence,需要 SDK 3.7.4+)支持每个玩家独立的持久化数据。Tool World 几乎所有的偏好设置都该用 PlayerData 存。
存什么:
- 用户最后选的灯光预设。
- 用户最后选的背景。
- 用户的几个自定义滑动条值。
- 是否打开某些可选模块(细节模式 / 简洁模式)。
读写时机:
- 进入世界时(
OnPlayerRestored事件触发后)读取,应用到当前状态。 - 用户调整时实时保存。
PlayerData 的具体用法第 28 章会展开。Tool World 几乎是 PlayerData 用得最多的世界类型。
不写「这个工具能干什么、不能干什么」
Section titled “不写「这个工具能干什么、不能干什么」”用户来了不知道工具是干嘛的,按了几下没找到想要的功能就走。或者用户带着错误的期待来(以为能做 X,实际只能做 Y)。
通用做法:在世界描述(VRChat 世界发布时填的简介)里写清:
- 这个工具能做什么(一两句话核心功能)。
- 不能做什么(避免用户带着错误期待进来)。
- 推荐使用场景(什么样的 Avatar / 什么样的需求)。
- 已知限制(只支持 PC?需要桌面模式?)。
世界描述是 Tool World 的「README」,比内部 UI 还重要。
技术上要先把哪几件做扎实
Section titled “技术上要先把哪几件做扎实”Tool World 的技术骨干跟 Game World 部分重叠,但更偏 UI 和数据:
- World Space UI:滑动条、按钮、下拉菜单、文本输入。第七部第 34 章。
- 状态机 + 数据管理:每一项设置都对应一个状态字段,状态变化触发对应的视觉效果。第三部 + 第 17 章。
- PlayerData 持久化:偏好设置、调试历史。第 28 章末尾或单独一节。
- 多预设系统:用户能切换「Outdoor / Indoor / Studio / Stage」几个预设,背后是几组参数的统一切换。
- 性能(保持低):第七部第 38 章,但目标跟其他世界相反(Tool World 是要给 Avatar 留预算)。
- 可选的同步:Tool World 默认单人用,偶尔需要让朋友看到自己当前的设置。轻量同步即可。
不需要重点啃的:
- 氛围 / 光照 / 材质设计:除非工具本身就是为这些服务的(光照预览间)。
- 多人同步:Tool World 多数功能本地就够。
- Late Joiner:基本不存在。
- Pickup:很少用,除非工具本身要测试 Pickup 功能。
- 声音设计:除了 UI 反馈音,几乎不用。
简化版优先级:
| 顺序 | 学什么 | 在书里的位置 |
|---|---|---|
| 1 | World Space UI(核心) | 第 34 章 |
| 2 | 状态机 + 多预设系统 | 第 17 章、第三部 |
| 3 | PlayerData 持久化 | 第 28 章 |
| 4 | 性能(保持低) | 第 38 章 |
| 5 | 简单的同步(按需) | 第六部按需 |
| 6 | 发布描述 + 文档 | 第 44 章 + 自己写 |
几种典型 Tool World 各自的取舍
Section titled “几种典型 Tool World 各自的取舍”「Tool World」内部还能再分几类:
- Avatar 测试间:核心是镜子 + 多场景灯光 + 多背景 + 性能监控。Tool 类型里很常见的一种。
- 动作 / 表情测试:核心是动作录制 + 回放 + 表情切换。需要 VRChat 的 Avatar Animation 系统。
- Shader / 材质实验:调一组材质参数实时看效果。需要做参数 → Shader 属性的实时绑定。
- 配色 / 调色实验:色板对照、渐变测试、互补色推荐。UI 极复杂。
- 音频 / 声场测试:测试不同位置、不同 Spatial Audio 设置下声音的表现。
- 教学 / 示范:演示某个机制的工作原理(PBR 材质示范、Shader 工作原理可视化、性能优化前后对比)。介于 Tool 和 Gallery 之间。
- 性能测试:批量绘制大量物体测试帧率、测试 Quest 兼容性。
按这条问自己:心里那个 Tool 偏哪一类?前两类用户最多,后几类用户少但价值高(社群核心创作者依赖)。
自己想想能落地的画面
Section titled “自己想想能落地的画面”把心里那个 Tool 写下来,回答这五件事:
- 核心任务一句话:用户进来要做什么?(例:「测试 Avatar 在五种典型 VRChat 世界灯光下的表现」)
- 目标用户:面向初学 Avatar 创作者,还是资深美术,还是特定圈子(毛绒系 / 模型师 / 动作师)?决定 UI 复杂度和默认设置。
- 必须的功能:列 5 到 10 个核心功能。功能太少没人用,太多会让 UI 塞满。
- 预设有哪些:用户大概会保存哪几组常用设置?预设是 Tool 的灵魂。
- 使用流程:用户进入 → 选 Avatar → 调整 → 保存 → 离开。每一步在 UI 上对应到哪?
这五条答完,画 UI 草图:每个面板、每个控件、每个状态指示。Tool World 的 UI 草图比 Hierarchy 早,比 Hierarchy 重要。
这一章在脑子里留下来的
Section titled “这一章在脑子里留下来的”走 Tool World 这条路要带走的:
- 评判标准是「用户能不能高效完成任务」。世界本身的视觉是后面的事。
- UI 是核心。比其他类型世界的 UI 复杂十倍。
- 性能预算要刻意低,给 Avatar 留空间。
- PlayerData 持久化几乎是必需品。
- 世界描述就是 README,跟内部 UI 一样重要。
- 「我自己用得爽」和「给别人用」是两件事,要选一条做透。
走这条路的话,后面几部按这个顺序读最稳:
第三部 + 第四部 ← 已学,按需回查 └ 状态机和事件系统是基础
第六部(和别人一起) ← 大半可跳 └ 第 28 章 同步基础 + PlayerData ← 关键:偏好设置持久化
第七部(让世界变成一个地方) ├ 第 32 章 空间、比例和舒适 ← 简单的工具空间布局 ├ 第 34 章 UI 和反馈 ← 核心 └ 第 38 章 性能 ← 关键:刻意保持低开销
第八部(做着做着会撞上的事) └ 第 41 章 测试 ← 关键:让陌生人来用一遍
第九部(发出去,然后继续走) ├ 第 44 章 发布 ← 关键:Description 写清楚 └ 第 46 章 维护 ← Tool World 是 issue 驱动的下一章看 Commercial World。商业世界把这一部前面六类的任意一种都可以叠上「卖东西」一层。VRChat Creator Economy 让创作者能从世界里直接拿到收益,但这层加上去要小心:商业元素跟体验感经常打架。