はじめに
VRChatのアップデートによって、OSCでの送受信が出来るようになりました。
何番煎じかはわかりませんが、とりあえず触ってみたのでまとめていきます。
(通信部分等をすべて作成するわけではありません)
目次
開発環境
・Windows10
・VRChat IK-Beta(2022/3/4時点)
・Javascript
・Node.js
・VisualStudioCode
Server側(VRC)
VRC側からの受信データを見てみる
とりあえずProtokolをインストールします。
https://hexler.net/protokol
起動してOSCタブでPORTを9001番で接続、VRCでアバターを動かしてみると、
この様にアバターの向き等の情報がパラメーターの値毎に受け取ることができます。
これはVRC側が出力しているOutputのパラメータになります。
VRCゲーム内での設定
VRChatをBeta版で起動すると、Optionのメニューに[OSC]の項目が追加されます。
EnabledをONにして、OSCDebug画面も表示させておくと、受信確認がスムーズに進みます。
Client側(PC側)
まずはアバターとの連携等考えずに、VRCへパラメータを送ってみます。
const osc = require('node-osc');
const client = new osc.Client('127.0.0.1', 9000);
client.send('/avatar/parameters/Hoge', 1);
Nodeで実行して、VRCのOSC Debug画面を確認してみると...
送信したデータが確認出来ました!
色々と複雑そうな気はしますが、ただ送信するだけであればこれでOKです。
アバターとの連携(Unity)
上記でパラメータを一方的にVRCへ送りつけることは出来るようになりましたが、
ここからアバターのパラメータと紐づけを行う必要があります。
OSCが有効な状態で変更したアバターは、以下にOSC用のjsonファイルが追加されます。
\Users[username]\AppData\LocalLow\VRChat\VRChat\OSC[userID]\Avatars
ファイル内に以下パラメータを追加しておきます。
{
"name": "hoge",
"input":{
"address":"/avatar/parameters/hoge",
"type":"Float"
}
}
Unity上では、まずはFXLayerのパラメータにFloat型で"Hoge"を追加します。
また連携したいアニメーションを作成し、以下の様に設定しておきます。
ここで追加、MotionTimeに設定するパラメータの名称は、jsonファイルに設定したaddress内のパラメータ名と同一にしておきます。
同様に、ExpressionsParameterにも同名のFloat型のパラメータを作成しておきます。
ゲーム内のExpressionMenuから操作しないのであれば、これだけでOKです!