跳转到内容

24. Tool World,做一个好用的工具

约 20 分钟 难度:进阶 理解章

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」,而非随意逛进来的玩家。创作者用工具的耐心阈值比游玩的耐心阈值低得多:能干就用,不能干就换,没有「再给一次机会」的余地。

Tool World 的用户期待非常工程化:

  • 直接进入工具。出生点直接是工具的「主操作位」,省掉片头动画、欢迎词、进门 Trigger 的「您好欢迎来到 X」这一类。
  • 看见所有控件。控件要在视野里、要标清楚、要状态可见(开关是开还是关、滑动条当前值多少、当前选了哪个选项)。
  • 可控的环境变量。如果是 Avatar 测试间,要能调灯光(不同色温、不同强度、Day / Night / Office / 户外)、可换背景(不同墙色 / 不同纹理 / 纯色对照)、可切相机(自拍角度 / 全身镜 / 局部特写)。
  • 能保存设置。下次进来还是用过的状态。
  • 多人不打扰。Tool World 多数时候单人用,偶尔需要给朋友看下「我做的 Avatar 在你那边长什么样」。两种使用场景都要支持。
  • 手册要简洁。功能复杂时要有内置说明。说明本身要克制:滑动条上方一句话、按钮旁边一行 tooltip 这种密度,10 页文字 Manual 在 VR 里几乎不会被读完。

期待里完全不存在的:「氛围」、「故事」、「探索」、「机关」、「彩蛋」。这些在 Tool World 里反而是干扰。

按踩坑频率排:

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 比其他世界都更精细。

按一个按钮没有任何反馈,用户会不确定「我按了吗」。一个滑动条拖动时数值不实时显示,用户不知道现在调到哪。

通用做法:

  • 按钮:按下时颜色变化(高亮 → 按下色 → 恢复),同时播一个轻微的 click 音效。
  • 滑动条:实时显示数值(在滑块上方或一侧)。
  • 开关:开 / 关用不同颜色(如绿 / 灰),同时改变形状(向左 / 向右)。
  • 下拉菜单:当前选项要醒目,可选列表用足够间距。

UI 反馈跟 Game World 的反馈是同一类需求,但 Tool World 对精度要求更高(Game 的反馈是「让玩家知道发生了什么」,Tool 的反馈是「让用户精确调到想要的值」)。

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 还重要。

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 反馈音,几乎不用。

简化版优先级:

顺序学什么在书里的位置
1World Space UI(核心)第 34 章
2状态机 + 多预设系统第 17 章、第三部
3PlayerData 持久化第 28 章
4性能(保持低)第 38 章
5简单的同步(按需)第六部按需
6发布描述 + 文档第 44 章 + 自己写

「Tool World」内部还能再分几类:

  • Avatar 测试间:核心是镜子 + 多场景灯光 + 多背景 + 性能监控。Tool 类型里很常见的一种。
  • 动作 / 表情测试:核心是动作录制 + 回放 + 表情切换。需要 VRChat 的 Avatar Animation 系统。
  • Shader / 材质实验:调一组材质参数实时看效果。需要做参数 → Shader 属性的实时绑定。
  • 配色 / 调色实验:色板对照、渐变测试、互补色推荐。UI 极复杂。
  • 音频 / 声场测试:测试不同位置、不同 Spatial Audio 设置下声音的表现。
  • 教学 / 示范:演示某个机制的工作原理(PBR 材质示范、Shader 工作原理可视化、性能优化前后对比)。介于 Tool 和 Gallery 之间。
  • 性能测试:批量绘制大量物体测试帧率、测试 Quest 兼容性。

按这条问自己:心里那个 Tool 偏哪一类?前两类用户最多,后几类用户少但价值高(社群核心创作者依赖)。

把心里那个 Tool 写下来,回答这五件事:

  1. 核心任务一句话:用户进来要做什么?(例:「测试 Avatar 在五种典型 VRChat 世界灯光下的表现」)
  2. 目标用户:面向初学 Avatar 创作者,还是资深美术,还是特定圈子(毛绒系 / 模型师 / 动作师)?决定 UI 复杂度和默认设置。
  3. 必须的功能:列 5 到 10 个核心功能。功能太少没人用,太多会让 UI 塞满。
  4. 预设有哪些:用户大概会保存哪几组常用设置?预设是 Tool 的灵魂。
  5. 使用流程:用户进入 → 选 Avatar → 调整 → 保存 → 离开。每一步在 UI 上对应到哪?

这五条答完,画 UI 草图:每个面板、每个控件、每个状态指示。Tool World 的 UI 草图比 Hierarchy 早,比 Hierarchy 重要。

走 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 让创作者能从世界里直接拿到收益,但这层加上去要小心:商业元素跟体验感经常打架。