👏
VRChatがOSCに対応したので、M5StackのUIFLowでライブラリなしのOSC通信してみた
前回
VRChatでOSCが使えるまでの設定をしておきます
今回
Node.jsで同じPC内でVRChat内のアバターをジャンプさせることができましたが、今回はM5StackCore2でやりますので、必然的に別マシンから遠隔(同LAN内)操作になります
さらに、M5StackでOSC通信しようとするとArduinoでのプログラミングが必要になりますが、M5StackのUIFlowを使ってOSC通信を目指してみます
OSC通信のフォーマットとかもちょっと学べました
できた様子
- M5StackCore2の左ボタンでTrueを送り、ジャンプボタンを押し込んだような動作をさせ、アバターが実際にジャンプ
- M5StackCore2の真ん中ボタンでFalseを送り、ジャンプボタンを離したような動作をさせることによって、もう一度ジャンプボタンを押して、ジャンプできるようにする(押し込んだまんまだともう一度押せないので)
UIFlow
こんな感じです
別のマシンにOSC通信
同じLAN内で、別のマシン(今回の場合はVRChatが立ち上がっているWinPC)のIPアドレスを使います
OSCフォーマット
OSCは、UDPのSocket通信で送っているメッセージのルールということなので、UIFlow内のUDPのSocket通信でできました!
ですが、/
や ,
で区切るだけかと思いきや NULLコード(\u0000)
やデータ型を示す T
や F
も必要でした
Open Sound Control (OSC) 1.0 仕様 [日本語訳] http://veritas-vos-liberabit.com/trans/OSC/OSC-spec-1_0.html
他もいろいろさせてみる
- ジャンプできた
udpsocket.send("/input/Jump\u0000,T")
udpsocket.send("/input/Jump\u0000,F")
- TとFで開始と終了を送る
- 拍手
- VRChat内でできるClapという動作を当てはめてみる(ドキュメントにはないけど)
udpsocket.send("/input/Clap\u0000,T")
- 動かず
- 前進
udpsocket.send("/input/MoveForward\u0000,T")
udpsocket.send("/input/MoveForward\u0000,F")
- 前進開始とストップができた!
- Verticalで前進
udpsocket.send("/input/Vertical\u0000,i\u00001")
udpsocket.send("/input/Vertical\u0000,i\u0000-1")
- 上記のジャンプと前進はドキュメントのカテゴリ的にはButtonsだが、これはAxesというカテゴリ
- 前進はできて、止まらない… -1 が特殊なのかな
- ちなみにNode.jsの 「node-osc」 を使って-1を送っても止まらず…てか止まっている状態から-1送ったら前進するという現象
- 0を送っても止まらない
結果と今後
- UIFlowで送信はなんとなくできそう
- けど、今後逆にVRChatからのアバターの変更情報を受け取るときとかはもしかしたら面倒なのかも
- UIFlowでMicroPythonのライブラリ使ってカスタムブロック作れないか調べていきたい
- あわよくばUIFlowでVRChat用のカスタムブロック作っていきたい!
Discussion