🎉

ElixirからOSC経由でVRChatと通信するライブラリVRChatOSCを作りました

2023/12/02に公開

Meta Quest 3を購入して、またVRの世界に戻ってきました。Resonite目当てだったのですが、VRChatもやってみようと始めてみたら、そちらはそちらですごく楽しいです。

VRChatにはOSCというしくみが用意されていて、外部とのやり取りが一定程度できるようです。そうなるとElixirで通信してみたくなりますよね。そんなわけで、ライブラリを作ってみました。

https://github.com/kentaro/vrchat_osc

VRChatOSCは、jwarwick/ex_osc: Open Sound Control server and client libraries for Elixirをフォークして作ったものです。VRChatのOSCの仕様に合わせて、いくつか変更を加えています。

VRChatOSCの使い方

VRChatOSCの使い方を簡単に紹介します。

基本的な使い方

まずは、基本的な使い方を紹介します。

  • イベントを受信する
  • チャットメッセージを送信する

ということをしてみましょう。以下のようにコードを書きます。ポイントは、GenStageのコンシューマーを定義してイベントハンドラーを書くということです。

https://github.com/kentaro/vrchat_osc/blob/main/examples/basic.exs

上記のコードを実行すると、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というコンセプトがあります。これは、コントローラーを外部から制御できるというものです。ここでは、簡単な例として、アバターをジャンプさせてみることにしました。以下のポストをごらんください。

https://twitter.com/kentaro/status/1730600856100470847

コードは以下の通りです。ジャンプすると/avatar/parameters/Groundedというイベントが飛んでくるので、その値に応じてジャンプボタンの状態を切り替えています。

https://github.com/kentaro/vrchat_osc/blob/main/examples/jump.exs

おわりに

まだVRChatやOSC、アバター等についてよくわかってないことが多くて、実用的な例をしめせていないのが残念ですが、ElixirからOSC経由でVRChatと通信できるようになったのは大きな一歩だと思います。Elixirから簡単にVRChatと通信できるようになったので、PhoenixによるWebアプリやNervesによるIoTデバイスとつなぎこんだりといったことが、簡単にできるようになりました。

ともあれ、VRChatもあれこれできそうで面白いですね。これからも楽しんでいきます。いまはUnityと格闘しているところです。難しい~。

GitHubで編集を提案

Discussion