hyoromoのブログ

最近はVRSNS向けに作ったものについて書いています

VRChat WorldをLocalBuildでマルチアカウントテストする方法

f:id:hyoromo:20210321195817j:plain
VRChat WorldのLocalBuildで複数ウィンドウを起動しても同一アカウントで起動してしまいテストが捗りません。

  • VRCStationに座ると他ウィンドウで起動したアバターも座ってしまい、更に視点と移動もバグる事があり安定しない
  • 後から誰かがWorldへ入る/出るの制御。同一アカウントでテストすると全部同じアカウント扱いなためテストにならない
  • ObjectのOwner。Objectへの干渉権限はOwnerのみなので、権限移譲する必要がある。が、これも同一アカウントだとテストにならない

上記のテストをするにはprivete worldとしてアップ*1し、Masterがサブアカウントを個別招待する必要があります。
これは小さいサイズのワールドですら15分くらい時間を取られ、次第に同期テストが疎かになっていきます。

なので、LocalBuildでもマルチアカウントでテストしちゃおう!というのが今回の話です。

※記載方法は自己責任でお試しください。何かありましても責任は負いかねます。

LocalBuildでマルチアカウントのテストって?

以下が導入後のテスト手順。
1. VRChatの"Build & Test"ボタンを押します
f:id:hyoromo:20210322202504j:plain:w300
2. いつもどおりVRChatクライアントが起動します
f:id:hyoromo:20210322202550j:plain:w600
3. 次に全サブアカウントのVRChatクライアントを起動するボタンを押します
f:id:hyoromo:20210322202712j:plain:w300
4. わーい
f:id:hyoromo:20210322202723j:plain:w600

求めていたものと一致していましたら以降を読み進めてください。

事前に準備するもの

VRChatはアカウントを誰かと共有する事を禁止していますが、サブアカウントに関しては制限を設けていないようです。なので、サブアカウントを作ります。
こんな時はgmailアカウントを持っていると楽です。例えば hoge@gmail.com アカウントの場合は、 h.oge@gmail.com や ho.ge@gmail.com と途中にピリオドを入れてもgmail側は同一と見なされる。VRChatアカウント側は別と見なされるため新規作成が行いやすいです。
support.google.com

環境

  • Unity2018.4.20f0
  • VRChat World SDK Version Date 2021.03.09.13.57

導入手順

  1. 以下からunitypackageファイルをDL
    Releases · hyoromo/VRCMultiAccountLocalTest · GitHub
  2. 導入したいUnityEditorを起動
  3. UnityEditorのメニューから「Assets > Import Package > Custom Package...」を選択
  4. 先程DLした Unity Packageファイルを選択してImport
  5. UnityEditorのメニューから「VRChat SDK > Show Controll Panel」で VRChat SDK ビューを表示
  6. Settingsタブの「VRChat Client > Editor」ボタンを押下
  7. Assets/Plugins/VRCMultiAccountLocalTest/VBS/VRCMultiAccountLocalTest.vbs を選択(選択時にファイル種類を exe から All files に変更すると選択可能)
  8. Builderタブの「Local Testing > Build & Test (or Last Build)」ボタンを押下
  9. メインアカウントでVRChatクライアントが起動
  10. UnityEditorのメニューから「Tools > VRCMultiAccountLocalTest > All-SubAccounts」選択
  11. サブアカウント数分のVRChatクライアントが起動
    デフォルトは2です。サブアカウント数の設定は後述します
  12. それぞれ別々のアカウントでログイン

なお、10の方法では全アカウント起動しますが、UnityEditorのメニューから「Tools > VRCMultiAccountLocalTest > SubAccounts」の子にある数字を選択する事で個別起動も可能です。

使用するサブアカウント数を変更
  1. Assets\Plugins\VRCMultiAccountLocalTest\VBS\VRCMultiAccountLocalTest.vbs ファイルをテキストエディタで開く
  2. 冒頭箇所に subAccountCount が 2 と定義されているので、必要なアカウント数に変更する
  3. Assets\Plugins\VRCMultiAccountLocalTest\Editor\VRCMultiAccountTestLauncher.cs の Launcher1メソッドをコピーして数字部分を追加番号に書き換える
LocalBuild毎に作成されるファイル

Assets/Plugins/VRCMultiAccountLocalTest/VBS/LauncherScripts 以下に毎回VBSファイルが作成されます。
なので以下はバージョン管理*2対象外にする事をオススメします。

Assets/Plugins/VRCMultiAccountLocalTest/VBS/LauncherScripts
Assets/Plugins/VRCMultiAccountLocalTest/VBS/LauncherScripts.meta
複数Unityプロジェクト利用時の注意点

VRChat SDKのSettingsタブ「VRChat Client > Editor」に設定されているPathは他UnityProjectとも共通の値になります。
そのため共通利用したい場合は以下の手順を踏む必要があります。

  • VBSフォルダをAssets以外の場所へ移動
  • Assets/Plugins/VRCMultiAccountLocalTest/Editor/VRCMultiAccountTestLauncher.cs を開く
  • GeLauncherScriptsPathメソッド内のpluginRootDir変数へ、変更後のパスを設定

コードは例えば以下のようにreturnの箇所だけ変更するだけで問題ありません。

private static string GeLauncherScriptsPath()
{
    return "C:\\Users\hoge\\Documents\\Tools\\VRChat\\VRCMultiAccountLocalTest\\VBS\\LauncherScripts";
}

解説

やっている事はシンプルで "Build&Test" でVRChatクライアント起動時に渡される引数をサブアカウント保存しておき、その引数にサブアカウント起動引数を追加しただけです。

LocalBuildされたワールドのバイナリ

VRChatはビルドすると以下の領域にワールドバイナリが生成されます。なので、別アカウントで起動する際に以下のパスを指定する必要があります。

C:\Users\(ユーザー名)\AppData\Local\Temp\DefaultCompany\(プロジェクト名)\scene-standalonewindows64-slidecube.vrcw

LocalBuildで作られたルーム

VRChatのルームにはLocalBuildであろうが、ユニークなroomIDが割り振られます。これはLocal Build時の引数内容から判明します。
LocalBuild時は他アカウントをワールド招待出来ないので注意が必要なところです。

複数アカウント切替

複数アカウントでログインする場合、VRChatの起動オプションであるprofileで指定出来ます。
docs.vrchat.com

そもそもVRChatで複数アカウント作成していいのか?という話がありますが、特に公式から言及が無いのでOKなのだと思います。NGならそもそもprofileオプション用意しないでしょうし。
hello.vrchat.com

Number of Clients を複数アカウント対応出来ない?

指定された回数分だけ Installed Client Path がコールされる作りだったため、今回の手動では対応出来ませんでした。
VRChat SDKのEditor部分を改造及び配布は規約違反なので試していません。

VRChatクライアント複数起動していると操作しにくくない?

Tab押下しながらマウス操作 or Tab+Altによるタブ切替で頑張るしかないですね。

コードについて

VBS初めて使った事もありコードはかなり汚いです。VBSを理解しようという思いより早く
もし改変されたい場合は解説に書いてある内容を元に、新たに書かれた方が実装コスト低いかもしれません。。。

*1:しかも3割くらいの確率でアップ中にUnityEditor落ちる...

*2:gitやunity collab等