Перейти к содержимому

VRChat OSC

VRChat OSC соединяет vrOS с VRChat по OSC. Отправляйте сообщения в чатбокс с панели на запястье, наблюдайте, как параметры аватара меняются вживую, управляйте внутриигровой камерой и позвольте VRChat самому найти vrOS.

Оно поставляется вместе с vrOS и разрешено заранее, как любое штатное расширение. О модели согласия и о том, как её отозвать, см. Как работают расширения.

Оно работает без VR. Чатбокс работает и при закрытом SteamVR.

vrOS анонсирует себя как службу OSCQuery через mDNS и отдаёт небольшое дерево 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 осей как float, ограниченные до -1..1, 20 кнопок как int 0 или 1
/usercamera/* Наружу Режим, действия, переключатели и ползунки
Трекеры 1-8 и голова, положение и поворот Наружу Ровный ритм, и только пока функция включена
Параметры контактов и хаптики Внутрь Настроенные вами префиксы приходят как события

Входящие адреса, которым ничего не соответствует, подсчитываются, а не отбрасываются молча, поэтому опечатка в префиксе видна, а не загадочна.

Отслеживания взгляда здесь намеренно нет

Заголовок раздела «Отслеживания взгляда здесь намеренно нет»

Это расширение не отправляет отслеживание взгляда в VRChat. Это работа VRCFaceTracking, и дублирование только мешало бы ей.

Там, где сам vrOS принимает взгляд по OSC, это отдельный приёмник внутри композитора vrOS, намеренно не это расширение. Сырые данные взгляда никогда не проходят через API расширений и никогда не попадают на шину событий. Расширения получают события фокуса и подтверждения, а не поток взгляда, и даже для них нужна отдельно выданная возможность.

Веб-API VRChat, его websocket, разбор журналов и JSON аватаров — всё это намеренно вне области этого расширения. Оно занимается механикой OSC и ничем больше. Именно разделение этих двух вещей не дало коду OSC в vrOS 1 обрасти зависимостью от каждой функции VRChat, которая случайно оказалась рядом.

  • Проверьте строку состояния расширения. В ней написано, найден ли VRChat.
  • Убедитесь, что OSC включён в самом VRChat. vrOS не может включить его за вас.
  • Если анонсирование выключено, у VRChat нет способа обнаружить порт, который слушает vrOS. Включите его обратно или задайте порт отправки VRChat самостоятельно.

Подробнее в разделе Устранение неполадок.