概要
この記事は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に設定しましょう。
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です。
#dispatcher.map("/*", printdata)
dispatcher.map("/avatar/parameters/Grounded", printdata)
とはいえ、厳密に言えばこちらはジャンプをした時以外にも、段差から落ちた時にも反応します。実際にスクリプトを起動してからアバターを動かしてテストしてみましょう。
カスタマイズする箇所
コードの根幹となる部分は下記の部分なので、カスタマイズして自分の好きなものを作りましょう~
dispatcher.map({このパラメータが検知されたら}, {この関数が走る})