5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-03-03

概要

この記事は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のキャラクターを操作しましょう。大量のデータがコンソールに出力されます。

listen_to_all.gif

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

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

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

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

listen_to_grounded.gif

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

カスタマイズする箇所

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

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

参考リンク

5
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?