跳转到内容

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 会排队,而不是灌满。短促的一串会直接发出去,随后发送会稳定到一个固定的节奏。离散的消息按顺序排队。在实时模式下,最新的那段部分文本会替换掉待发的那一条,而不是堆叠起来,所以到达的就是你最后输入的内容。

如果队列溢出,面板会告诉你。被丢弃的发送会被计数并显示出来,绝不会无声无息。

四个页面,每个页面的底栏上都有一行自定义发送。

页面 上面有什么
聊天 聊天框,与叠加层面板共享状态
参数 实时的角色参数,含名称、类型和当前值,以及已加载的角色
相机 模式、拍摄操作、有文档记载的开关,以及各个滑块
追踪器 追踪器发送及其节奏开关

自定义发送行接受一个地址和一个值,用于这些页面没有覆盖到的任何东西。

参数是实时视图,不是日志。页面在屏幕上时它会更新,不在时就停止推送,不过无论哪种情况扩展都在持续获知数值,所以你一打开这个页面,它就是对的。

相机模式从 0 到 6:关闭、照片、直播、表情、多图层、打印、无人机。各个滑块(变焦、对焦距离、光圈、色相,以及其余的)会先钳制到 VRChat 有文档记载的范围,然后才有东西发到线上。

界面 方向 说明
聊天框输入与输入指示 发送 按上文限流
角色参数 收发 包含字符串参数和多参数
角色切换 收发 既包含发送,也包含你的角色已加载的通知
/input/* 发送 9 个轴为钳制到 -1..1 的浮点数,20 个按钮为 0 或 1 的整数
/usercamera/* 发送 模式、操作、开关和滑块
追踪器 1-8 和头部,位置与旋转 发送 固定节奏,且仅在该功能开启时
联系与触觉参数 接收 你配置的那些前缀会作为事件到达

什么都匹配不上的入站地址会被计数,而不是被悄悄丢弃,所以前缀里的一个拼写错误是看得见的,而不是莫名其妙的。

这个扩展不会把眼动追踪发给 VRChat。那是 VRCFaceTracking 的活,重复做只会和它打架。

vrOS 自己通过 OSC 消费视线数据的地方,是 vrOS 合成器内部一个专用的监听器,有意不放在这个扩展里。原始注视数据从不跨过扩展 API,也从不到达事件总线。扩展收到的是焦点事件和确认事件,绝不是一条注视流,而且连这些也需要各自的能力授予。

VRChat 的 web API、它的 websocket、日志解析和角色 JSON,按设计都不在这个扩展的范围内。它只做 OSC 这套机制,别的都不做。把两者分开,正是当年让 vrOS 1 里的 OSC 代码没有长出对每一个碰巧挨着它的 VRChat 功能的依赖的原因。

  • 查看扩展的状态行。它会说明是否已经找到 VRChat。
  • 确认 VRChat 本身已启用 OSC。vrOS 无法替你打开它。
  • 如果广播是关的,VRChat 就无从发现 vrOS 正在监听的那个端口。把它重新打开,或者自己设置 VRChat 的发送端口。

更多内容见故障排查。