VRChat OSC
VRChat OSC 通过 OSC 把 vrOS 连到 VRChat。从你手腕上的一个面板发送聊天框消息,实时看着角色参数变化,操控游戏内的相机,并让 VRChat 自己找到 vrOS。
它随 vrOS 一起发布,并且和每个第一方扩展一样已预先授予。同意模型以及如何撤销它,见扩展如何工作。
它无需 VR 也能运行。SteamVR 关着的时候,聊天框照样能用。
vrOS 通过 mDNS 把自己广播为一个 OSCQuery 服务,并提供一棵小小的 OSCQuery 树,描述它监听什么。VRChat 找到它,读取广播出来的端口,然后开始发送。你不需要在任何地方输入端口。
这换来两样东西:
- vrOS 监听的是系统分配的端口而不是固定端口,所以它不会和 VRChat 自己的监听端口撞车。
- vrOS 知道 VRChat 是不是真的在。它会探测自己发现的那个服务,并观察入站流量。单次探测落空绝不会翻转状态,但 VRChat 关闭是被检测出来的,而不是被想当然地略过。
广播默认开启。如果你更愿意自己把 VRChat 指向 vrOS,可以在扩展的设置里把它关掉。
| 设置 | 默认值 | 它是什么 |
|---|---|---|
| 发送目标 | 127.0.0.1:9000 |
vrOS 把 OSC 发到哪里。VRChat 的默认接收端口。 |
| 监听绑定 | 127.0.0.1:0 |
vrOS 在哪里接收。端口 0 表示由系统挑选,OSCQuery 会广播它挑中的那个。 |
| 广播(OSCQuery/mDNS) | 开启 | 通过 mDNS 公告,并回应 OSCQuery 请求。 |
| 联系前缀 | 空 | 以逗号分隔的参数前缀,作为联系事件呈现。 |
聊天框存在于共享同一份状态的两个界面上:一个可生成的叠加层面板,以及仪表盘标签页的聊天页。在哪一个里输入都行。把叠加层面板锚定到一只手腕上,重启之后它会回到那只手腕。
面板上有一个文本框、发送,以及三个开关:
- 输入中 会在你打字时显示游戏内的输入指示。当你发送、清空文本框,或者焦点离开面板时,它会清掉。
- 声音 控制消息到达时是否播放 VRChat 的提示音。
- 实时 会在你打字的过程中就发送部分文本,而不是只在按发送时才发。
VRChat 的聊天框接受 144 个字符。更长的文本会在字符边界处截断,面板会告诉你。
vrOS 会排队,而不是灌满。短促的一串会直接发出去,随后发送会稳定到一个固定的节奏。离散的消息按顺序排队。在实时模式下,最新的那段部分文本会替换掉待发的那一条,而不是堆叠起来,所以到达的就是你最后输入的内容。
如果队列溢出,面板会告诉你。被丢弃的发送会被计数并显示出来,绝不会无声无息。
仪表盘标签页
Section titled “仪表盘标签页”四个页面,每个页面的底栏上都有一行自定义发送。
| 页面 | 上面有什么 |
|---|---|
| 聊天 | 聊天框,与叠加层面板共享状态 |
| 参数 | 实时的角色参数,含名称、类型和当前值,以及已加载的角色 |
| 相机 | 模式、拍摄操作、有文档记载的开关,以及各个滑块 |
| 追踪器 | 追踪器发送及其节奏开关 |
自定义发送行接受一个地址和一个值,用于这些页面没有覆盖到的任何东西。
参数是实时视图,不是日志。页面在屏幕上时它会更新,不在时就停止推送,不过无论哪种情况扩展都在持续获知数值,所以你一打开这个页面,它就是对的。
相机模式从 0 到 6:关闭、照片、直播、表情、多图层、打印、无人机。各个滑块(变焦、对焦距离、光圈、色相,以及其余的)会先钳制到 VRChat 有文档记载的范围,然后才有东西发到线上。
它发送和接收什么
Section titled “它发送和接收什么”| 界面 | 方向 | 说明 |
|---|---|---|
| 聊天框输入与输入指示 | 发送 | 按上文限流 |
| 角色参数 | 收发 | 包含字符串参数和多参数 |
| 角色切换 | 收发 | 既包含发送,也包含你的角色已加载的通知 |
/input/* |
发送 | 9 个轴为钳制到 -1..1 的浮点数,20 个按钮为 0 或 1 的整数 |
/usercamera/* |
发送 | 模式、操作、开关和滑块 |
| 追踪器 1-8 和头部,位置与旋转 | 发送 | 固定节奏,且仅在该功能开启时 |
| 联系与触觉参数 | 接收 | 你配置的那些前缀会作为事件到达 |
什么都匹配不上的入站地址会被计数,而不是被悄悄丢弃,所以前缀里的一个拼写错误是看得见的,而不是莫名其妙的。
眼动追踪是有意不在这里的
Section titled “眼动追踪是有意不在这里的”这个扩展不会把眼动追踪发给 VRChat。那是 VRCFaceTracking 的活,重复做只会和它打架。
vrOS 自己通过 OSC 消费视线数据的地方,是 vrOS 合成器内部一个专用的监听器,有意不放在这个扩展里。原始注视数据从不跨过扩展 API,也从不到达事件总线。扩展收到的是焦点事件和确认事件,绝不是一条注视流,而且连这些也需要各自的能力授予。
同样不在这里
Section titled “同样不在这里”VRChat 的 web API、它的 websocket、日志解析和角色 JSON,按设计都不在这个扩展的范围内。它只做 OSC 这套机制,别的都不做。把两者分开,正是当年让 vrOS 1 里的 OSC 代码没有长出对每一个碰巧挨着它的 VRChat 功能的依赖的原因。
如果 VRChat 看不到 vrOS
Section titled “如果 VRChat 看不到 vrOS”- 查看扩展的状态行。它会说明是否已经找到 VRChat。
- 确认 VRChat 本身已启用 OSC。vrOS 无法替你打开它。
- 如果广播是关的,VRChat 就无从发现 vrOS 正在监听的那个端口。把它重新打开,或者自己设置 VRChat 的发送端口。
更多内容见故障排查。