ParrelSync でクローンした複数の Unity Editor を localhost TCP で接続し、ビルドせずに Editor 上で VRChat ワールドのマルチプレイ動作確認を行うツールです。VRChat ClientSim に NetCode 的な通信レイヤーを追加するイメージで動作します。
OnPlayerJoined の配信)をハンドシェイク完了まで保留します。これにより 全インスタンスでプレイヤーID・マスターが一致した状態で Udon が動き始めます。ClientSimNetworkIdHolder / NetworkID)をそのまま利用します。NetworkID はシーンの Transform パス順に決定的に割り当てられるため、クローン間で必ず一致します。| 機能 | 対応 |
|---|---|
[UdonSynced] 変数 (Continuous / Manual + RequestSerialization) | ✅ |
OnPreSerialization / OnPostSerialization / OnDeserialization | ✅ |
SendCustomNetworkEvent(引数付き [NetworkCallable] 含む、NetworkCalling.CallingPlayer 対応) | ✅ |
Ownership (Networking.SetOwner / TakeOwnership / Pickup による移譲 / OnOwnershipTransferred) | ✅ |
VRCObjectSync(位置・回転・Rigidbody) | ✅(10Hz、補間なし) |
VRCObjectPool | ✅(同期変数として) |
プレイヤーの参加/退出 (OnPlayerJoined / OnPlayerLeft)、マスター判定 | ✅ |
| プレイヤー位置の反映(リモートプレイヤーの移動) | ✅(10Hz) |
Station 着席 (OnStationEntered / OnStationExited、リモートプレイヤーの着席表示) | ✅ |
| レイトジョイン(参加時に現在の同期状態を受信) | ✅ |
| ボイス、アバター、PlayerData/Persistence | ❌ 未対応 |
VRCInstantiate した動的オブジェクトの同期 | ❌(VRChat 本番同様、ObjectPool を使ってください) |
VPM パッケージ(com.nyakomechan.vrchat-multisim)として配布しています。
Unity Package Manager(git URL)で追加する場合:
Window → Package Manager → + → Add package from git URL... に以下を入力
https://github.com/nyakomechan/VRChatMultiSim.git?path=/Packages/com.nyakomechan.vrchat-multisim
手動で追加する場合: このリポジトリの Packages/com.nyakomechan.vrchat-multisim/ フォルダを、
ワールドプロジェクトの Packages/ 直下にコピー(埋め込みパッケージ)
前提パッケージ:
com.vrchat.worlds 3.10.x(VCC ワールドプロジェクト)https://github.com/VeriorPies/ParrelSync.git?path=/ParrelSync)
— 未導入でもコンパイルは通りますが、ホスト専用になります(クローン=クライアントの判別に必要)[MultiSim] プレフィックスでログが出ますPackage Manager でこのパッケージを選択し、Samples タブ → “MultiSim Test Board” → Import すると UdonSharp のテストギミックが Assets 配下に取り込まれます。
MultiSimTestBoard.cs — Cube 等に付けてクリック(Interact)→ Ownership 取得 + 同期変数
インクリメント + RequestSerialization + 全員へネットワークイベント送信MultiSimStationSeat.cs — VRCStation 付きの椅子オブジェクトに付けてクリック → 着席。
全エディタで OnStationEntered/Exited が発火し、リモート側でも着席位置に表示されます各エディタの Console で OnDeserialization / NetworkEvent / Station イベントの受信を確認できます。
OnPreSerialization 内で行った変更は 1 tick 遅れて送信されます(Manual は正確です)。isInstanceOwner はホストのみ true です。Tools/VRChat MultiSim の設定(既定 24685)。他ツールと衝突する場合は MultiSimPrefs の EditorPrefs キー MultiSim.Port を変更してください。Packages/com.nyakomechan.vrchat-multisim/
package.json VPM/UPM パッケージ定義
MultiSimCore.cs 起動制御・ハンドシェイク・ID再割当・Ready制御・同期ループ
MultiSimTransport.cs localhost TCP(長さプレフィックス付き JSON)
MultiSimRegistry.cs NetworkID → ClientSimNetworkIdHolder のマップ構築
MultiSimReflect.cs ClientSim 内部へのリフレクション橋渡し(SDK 3.10.x 固定)
MultiSimUdonCodec.cs UdonBehaviour 用 Encode/Decode(ClientSim のバグ回避)
MultiSimJson.cs VRCJson ベースのメッセージ/イベント引数シリアライズ
MultiSimPrefs.cs 設定(EditorPrefs)+ ParrelSync 判別ヘルパー
MultiSimMenu.cs Tools メニュー
Samples~/MultiSimTestBoard/
MultiSimTestBoard.cs 動作確認用 UdonSharp ギミック(Samples から Import)
すべて #if UNITY_EDITOR で囲まれており、ワールドのビルド/アップロードには一切含まれません。
MIT License
Copyright (c) nyakomechan
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
com.nyakomechan.vrchat-multisim
https://github.com/nyakomechan/VRChatMultiSim
0.2.1 (Changelog)
2022.3 or later
No dependencies
No legacy packages