ClientSim に Local TCP通信機能を付加し、 Unity Editor 上で VRChat ワールドのマルチプレイヤーでの動作確認を行うツールです。
ParrelSync を用いて複製したプレイヤー人数分の Unity Editor にて、通常のClientSimと同じ感覚でマルチプレイヤーでの動作確認を行えます。
同期の遅延( VRC Object Sync や変数同期で生じる遅延)については再現していません。
VRChat ワールドの同期ギミック(同期変数、ネットワークイベント、Ownership、ピックアップ、Station など)を作っていて、こんな経験はありませんか?
MultiSim を入れると、ParrelSync で複製した 2 つ(以上)の Unity Editor がお互いに通信し、それぞれが別のプレイヤーとして同じワールドに入った状態になります。片方の Editor でボタンを押せば、もう片方の Editor でも同期変数が更新され、OnDeserialization やネットワークイベントが発火します。コードを直したら Play し直すだけ。ビルドもアップロードも不要です。
OnPlayerJoined などが配信されます。| 機能 | 対応 |
|---|---|
[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)として配布しています。
VRChat Package Managerで追加する場合: (https://nyakomechan.github.io/vpm-repository/) よりAdd To VCCを押してリポジトリを登録、ManageProjectよりVRChatMuliSimを導入して下さい。
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 を変更してください。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) nyakome
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.5 (Changelog)
2022.3 or later
No dependencies
No legacy packages