ElixirからOSC経由でVRChatと通信するライブラリVRChatOSCを作りました
Meta Quest 3を購入して、またVRの世界に戻ってきました。Resonite目当てだったのですが、VRChatもやってみようと始めてみたら、そちらはそちらですごく楽しいです。
VRChatにはOSCというしくみが用意されていて、外部とのやり取りが一定程度できるようです。そうなるとElixirで通信してみたくなりますよね。そんなわけで、ライブラリを作ってみました。
VRChatOSCは、jwarwick/ex_osc: Open Sound Control server and client libraries for Elixirをフォークして作ったものです。VRChatのOSCの仕様に合わせて、いくつか変更を加えています。
VRChatOSCの使い方
VRChatOSCの使い方を簡単に紹介します。
基本的な使い方
まずは、基本的な使い方を紹介します。
- イベントを受信する
- チャットメッセージを送信する
ということをしてみましょう。以下のようにコードを書きます。ポイントは、GenStage
のコンシューマーを定義してイベントハンドラーを書くということです。
上記のコードを実行すると、VRChat内に以下のようにメッセージが表示されます。
ターミナルには、以下の通りイベントがずらずらと大量に表示されます。この中から、必要なものを選んでハンドリングすればいいわけですね。
%VRChatOSC.OSC.Message{
path: "/avatar/parameters/scarf_Angle",
args: [5.154856480658054e-4]
}
%VRChatOSC.OSC.Message{
path: "/avatar/parameters/scarf_Angle",
args: [3.2970565371215343e-4]
}
%VRChatOSC.OSC.Message{
path: "/avatar/parameters/scarf_Angle",
args: [6.501884781755507e-4]
}
...
アバターを操作する
VRChatにはOSC as Input Controllerというコンセプトがあります。これは、コントローラーを外部から制御できるというものです。ここでは、簡単な例として、アバターをジャンプさせてみることにしました。以下のポストをごらんください。
コードは以下の通りです。ジャンプすると/avatar/parameters/Grounded
というイベントが飛んでくるので、その値に応じてジャンプボタンの状態を切り替えています。
おわりに
まだVRChatやOSC、アバター等についてよくわかってないことが多くて、実用的な例をしめせていないのが残念ですが、ElixirからOSC経由でVRChatと通信できるようになったのは大きな一歩だと思います。Elixirから簡単にVRChatと通信できるようになったので、PhoenixによるWebアプリやNervesによるIoTデバイスとつなぎこんだりといったことが、簡単にできるようになりました。
ともあれ、VRChatもあれこれできそうで面白いですね。これからも楽しんでいきます。いまはUnityと格闘しているところです。難しい~。
Discussion