pythonとOSCでVRChatのアバター情報を取得する


概要

この記事はVRChatとOSCを使って、とりあえず何か動くものを作りたい!と思ってる人向けの記事です。pythonのスクリプトを実行することにより、VRChatのアバターの動きがOSCを通してコンソールに出力されます。

さて、やっていきましょう。手元に必要なのは VRChat と python だけです(v´∀`)v

OSCとは

こちらの記事で確認が出来ます。

pythonスクリプトを作成する

python-osc のインストール

まずVRChatと通信が出来るライブラリが必要です。pythonが使用出来る環境でpython-oscをインストールします。

pip install python-osc

VRChat用のスクリプトを作成

python-oscのドキュメントを参考にスクリプトを作成します。Port番号はVRChatのドキュメントで案内されている通り、9001に設定しましょう。

listen_to_vrchat.py
import argparse
from typing import List
from pythonosc import dispatcher
from pythonosc import osc_server

def printdata(address: str, *osc_arguments: List[str]):
    print(address + "  " + str(osc_arguments[0]))


if __name__ == "__main__":
  parser = argparse.ArgumentParser()
  parser.add_argument("--ip",
      default="127.0.0.1", help="The ip to listen on")
  parser.add_argument("--port",
      type=int, default=9001, help="The port to listen on")
  args = parser.parse_args()

  dispatcher = dispatcher.Dispatcher()
  dispatcher.map("/*", printdata)

  server = osc_server.ThreadingOSCUDPServer(
      (args.ip, args.port), dispatcher)
  print("Serving on {}".format(server.server_address))
  server.serve_forever()

VRChatへの通信を確認する

まずVRChatのベータ版を立ち上げます。続けてVRChatのOSCの設定をオンにします。

pythonスクリプトを実行する

全てのデータを出力する

VRChatは起動したままで、pythonのコードをパソコンのコマンドラインから実行します。

python listen_to_vrchat.py

実行しはじめたら、VRChatのキャラクターを操作しましょう。大量のデータがコンソールに出力されます。

pythonのスクリプト自体を止めたい時は ctrl + c で終了させてください。

特定のデータだけを出力する

コンソールに特定のデータだけを出力したい場合は、パスを限定するようにコードを書き換えます。例として、アバターのジャンプに関する情報だけ出力したいとしましょう。先程のスクリプトが実行されてる時にジャンプをすると、/avatar/parameters/Grounded の値が出力されることが確認出来ました。現状 /* を指定して全てのデータに対してアクションを起こしてるので、ここを書き換えればOKです。

listen_to_vrchat.py
#dispatcher.map("/*", printdata)
dispatcher.map("/avatar/parameters/Grounded", printdata)

とはいえ、厳密に言えばこちらはジャンプをした時以外にも、段差から落ちた時にも反応します。実際にスクリプトを起動してからアバターを動かしてテストしてみましょう。

カスタマイズする箇所

コードの根幹となる部分は下記の部分なので、カスタマイズして自分の好きなものを作りましょう~

dispatcher.map({このパラメータが検知されたら}, {この関数が走る})

参考リンク