vrOS
文档

扩展

需要什么就加什么,不需要的一个都不加。

vrOS 的核心是叠加层、输入、性能和游玩空间。创作者工具都是扩展,你一个一个地开启——每个扩展都会申报自己要用的能力,在你做出决定之前保持停止。

vrOS 2.0.0 先交付这套基础。创作者功能会以扩展的形式逐步回归,这个页面会写明是哪些、什么时候。

运作方式

各自独立的程序,凭你的许可运行。

受监管,而不是缝进主程序

第三方扩展在自己的进程里运行。它崩溃时会按自己清单里的策略重启,vrOS 的其余部分照常运行。内置扩展则以同样的规矩,作为受监管的任务在应用内运行。

同意,一次一项能力

扩展运行之前,vrOS 会用大白话列出它请求了什么:叠加层、捕获、音频、事件总线、网络。你逐项授予,之后随时可以在 设置 → 扩展 里撤销任何一项。如果某次更新要求新的东西,它只会为那一项重新询问。

对授权意味着什么毫不含糊

由 vrOS API 掌管的能力,由 vrOS 强制执行。网络访问属于声明,而不是沙箱:原生程序不问 vrOS 也能打开套接字,所以清单会把它写明,让你在启用任何东西之前就看到。

崩溃也带得走的状态

扩展的状态存放在 vrOS 的存储里,而不是扩展自己的进程里。崩溃、重启应用或重启电脑之后,它都会回到原来的位置;SteamVR 来来去去也从不会把它拆散。

摘下头显也能用

vrOS 首先是一个桌面应用,它的扩展也是。发送 OSC 消息、触发 Soundboard 的音垫,在 SteamVR 关闭时照样可用。

空闲就是真的空闲

已启用但没在做事的扩展不跑定时器、不轮询、也不重绘。只有在显示相关内容的面板出现在屏幕上时,OBS control 才会查询推流和录制状态。

扩展从你自己机器上的文件夹安装,同意界面出现在首次运行之前。签名分发是后面的一步。

面板

扩展的界面,就是同一套界面。

扩展以 Slint 文件的形式提供面板,由 vrOS 自己渲染——同一个渲染器、同一套主题,附近没有任何 Web 引擎。

  • 面板既可以是 Dash 里的一个标签页,也可以是你摆在空间中的浮动叠加层
  • 内置扩展的面板和 vrOS 的其余部分一样,提供全部九种语言
  • 叠加层面板可以锚定到世界、头部或左右任一只手,重启后回到你放它的位置
  • VR 键盘在扩展面板里打字,和在 vrOS 自己的面板里一样
  • 加载失败的面板会写出扩展名称和错误,而不是一片空白

阵容

有什么,什么时候来。

四个扩展,按开发顺序排列。VRChat OSC、OBS control 和 Soundboard 属于 v2.0.0 首发。Twitch chat 排在最后,还没有日期。

VRChat OSC

首发时

把 VRChat 的 OSC 面收拢到一处:带输入指示和声音开关的聊天框、角色参数收发、切换角色、input 命名空间和 camera 命名空间。OSCQuery 与 mDNS 让 VRChat 找到它以及它监听的端口。该端口默认绑定在回环地址上,所以网络上的其他东西无法把参数推给你的角色。聊天框面板锚定在手腕上。

OBS control

首发时

通过 obs-websocket 连接任意多个 OBS 实例,本地或远程都行。切换场景、开始与停止推流或录制、切换与锁定源,并读取统计数据。一块紧凑的导播面板浮在你面前,显示场景网格、推流与录制状态以及 tally。

Soundboard

首发时

每个音垫都有独立的音量和循环设置,由 vrOS 音频引擎播放。同一个声音可以同时送到多个输出,让一段音频同时进入你的耳机和虚拟麦克风。音垫本身就是命令,因此可以在 SteamVR 里绑定到控制器上。

Twitch chat

暂无日期

聊天就在面板上,和其他一切并排。登录使用设备码流程,vrOS 从不会看到你的密码。它排在最后。

内置扩展在到来时能力已经授予。你可以在 设置 → 扩展 里撤销其中任何一项,和第三方扩展一样。

自己动手做一个

内置扩展用的就是这套 API。

扩展通过本地套接字与 vrOS 通信——JSON-RPC,一行一个对象——所以扩展可以用任何语言编写。第一方功能刻意建立在同一套 API 之上:如果 VRChat OSC 无法基于扩展 API 构建,那说明是 API 错了。

扩展 SDK 尚未公开。