vedaloivdocs

Multiplayer

FishNet Multiplayer Addon

Documentation for v1.6.0Optional addonFishNet 4.7.2FBSystem v1.6.0

Make FBSystem scenes and players multiplayer-ready with the optional FBSystemFishNet addon: client-authoritative movement, animator and item sync, networked world items, and a dedicated Setup Wizard.

On this page
  1. What the addon does
  2. Requirements
  3. 1. Install FishNet and the addon
  4. Video: FishNet quick setup
  5. 2. FishNet Setup Wizard
  6. Step 1: Scene Setup
  7. Step 2: Select Player
  8. Step 3: FishNet Components
  9. Step 4: World Items
  10. Step 5: Validation
  11. 3. Networked world items
  12. What gets synchronized
  13. Not included by design
  14. Testing host & remote client
  15. Host test in the editor
  16. Remote-client test
  17. Troubleshooting

What the addon does#

An optional package that lives in Assets/FBSystemFishNet/. It turns any scene and any FBSystem player into a FishNet-multiplayer setup without touching the base package.

  • A 5-step Setup Wizard wires the NetworkManager, the player bridge and world items. Every step is idempotent: existing objects are reused.
  • FishNetPlayerBridge syncs movement, animator state, look pitch and item equipment, and auto-discovers owner-only components (ItemSwitcher, PlayerInteraction, PlayerDropSystem).
  • FishNetFPCutterVisibility hides the head for the local player (no FP clipping) and shows the full body on every remote.
  • A drag-and-drop world-item window creates _Net variants, registers them, and fills the bridge prefab list.
  • A prepared demo scene is included.

Requirements#

RequirementVersionNotes
FBSystemv1.6.0base asset must already be in the project; add-on packages from older versions do not compile against 1.6
FishNet4.7.2install before importing FBSystemFishNet — FishNet is not bundled in the addon
Unity6000.5.0+ (Unity 6.5)same as the base asset
Render PipelineURPinherited from the base asset (demo + FPCutter)

1. Install FishNet and the addon#

  1. Import FishNet (4.7.2) into your Unity project.
  2. Import the optional FBSystemFishNet addon folder or package.
  3. Open the scene you want to make multiplayer-ready.

Video: FishNet quick setup#

The five wizard steps from an empty scene to a host test.

Open on YouTube (opens in a new tab) if the embed is blocked. Video ID: BN9u25nHWHw

2. FishNet Setup Wizard#

Menu: Tools ▸ FBSystem ▸ FishNet ▸ Setup Wizard. The wizard has five steps with a progress bar, < Back and Next > buttons, and Finish Setup on the last step. It lives only in Assets/FBSystemFishNet and does not change core files under Assets/FBSystem. To export the addon as a .unitypackage, export only the FishNet folder.

Step 1: Scene Setup#

FishNet Setup step 1: Scene Setup with status checks for NetworkManager, TransportManager, PlayerSpawner, Connection HUD and EventSystem
Step 1 / Scene Setup — idempotent setup

Prepares the open scene as a FishNet host:

  • Creates or reuses a NetworkManager with Tugboat transport (default port 7770), ObserverManager, PlayerSpawner, spawnable-prefab wiring and an EventSystem.
  • Instantiates FishNet's own NetworkHudCanvas prefab (Assets/FishNet/Demos/Prefabs/NetworkHudCanvas.prefab) for Start Server and Start Client. If the FishNet demos were removed, the wizard warns: restore the prefab.
  • All status rows turn green: NetworkManager, TransportManager + Tugboat, PlayerSpawner, Connection HUD, EventSystem. The button ✨ Make Scene FishNet Ready runs this step.

Step 2: Select Player#

FishNet Setup step 2: Select Player with the Player Root field and a hint to drag the player from the Hierarchy
Step 2 / Select Player — choose the scene instance

Select the FBSystem player GameObject from the Hierarchy. It must be a scene instance, not a plain prefab asset, and must carry PlayerController, Animator and the other components. The wizard adds NetworkObject and FishNetPlayerBridge, and reconfigures the bridge if it already exists.

  • Field Player Root: None (Game Object). Drag the instance from the scene into it.
  • Yellow hint: Drag your player from the Hierarchy (scene instance). Prefab assets must be in a scene.
  • If you use FPCutter, FishNetFPCutterVisibility is wired automatically: the head is hidden locally and fully visible remotely.

Step 3: FishNet Components#

FishNet Setup step 3: FishNet Components with green checks for NetworkObject, NetworkTransform, NetworkAnimator, FishNetPlayerBridge and FPCutterVisibility
Step 3 / FishNet Components — configure the network components

Adds and configures the network components without changing core FBSystem files:

  • NetworkObject, NetworkTransform (CharacterController, ClientAuth), NetworkAnimator (ClientAuth, Animator ref), FishNetPlayerBridge and FishNetFPCutterVisibility (local = FirstPerson / remote = ThirdPerson), each with a green check.
  • When an FPCutter mesh is detected, the info line reads: FPCutter mesh detected — FishNetFPCutterVisibility will hide Head for local player (no camera clipping) and show full body for remotes.
  • Button ✨ Configure FishNet Components. The Recent Changes list then shows Configured NetworkObject / NetworkTransform / NetworkAnimator and FishNetFPCutterVisibility already present.

Step 4: World Items#

FishNet Setup step 4: World Items listing two ItemContainer entries, Flashlightworlditem and Box_worlditem
Step 4 / World Items — _Net variants from the ItemContainer

Converts WorldItem prefabs to networked variants: it adds NetworkObject and NetworkTransform, creates *_Net.prefab files under Assets/FBSystemFishNet/Testing/WorldItems/ and registers them as spawnable.

  • Example from the screenshot: Found 2 item(s) in ItemContainer → [0] 1 -> Flashlightworlditem, [1] 2 -> Box_worlditem.
  • Buttons ✨ Setup Networked World Items (from ItemContainer) and Open WorldItem Setup Window (Drag & Drop, Find All, Remove) for manual management.
  • To add items freely by drag and drop, use Tools ▸ FBSystem ▸ FishNet ▸ Setup Networked World Items (separate window).

Step 5: Validation#

FishNet Setup step 5: Validation with the All checks passed message and the Select NetworkManager and Export buttons
Step 5 / Validation — final health check

Final health check. Fix any remaining warnings. This step does not change core FBSystem files.

  • On success: ✨ All checks passed — the scene and player are ready for FishNet. Press Play and use FishNet's HUD buttons (Start Server / Start Client).
  • Button Select NetworkManager in Scene and the Export section: to ship the addon as a .unitypackage, select the Assets/FBSystemFishNet folder, right-click, and choose Export Package. The core Assets/FBSystem folder stays untouched and works without FishNet.
  • Close the wizard with Finish Setup. If needed, the wizard generates a GeneratedPlayers/*_Network prefab asset, so PlayerSpawner never holds a scene instance. This fixes PrefabId 65535 and NullReference errors on spawn.

Owner-only behaviours (ItemSwitcher, PlayerInteraction, PlayerDropSystem) are detected automatically on the bridge.

3. Networked world items#

Menu: Tools ▸ FBSystem ▸ FishNet ▸ Setup Networked World Items opens a drag-and-drop window (NetworkWorldItemSetupWindow). Use Find All WorldItems and add or remove entries before applying. Auto-Find Bridge and ItemContainer integration are available. The window:

  • Creates _Net WorldItem variants.
  • Registers them with FishNet.
  • Fills the bridge's prefab list on the player.

Pickup despawns the server object. A drop spawns a networked WorldItem that is visible to all clients (server authoritative).

What gets synchronized#

WhatHow
Root position & rotationFishNet NetworkTransform, client-authoritative
Animator stateFishNet NetworkAnimator
Look pitchnetworked for camera-dependent remote IK
Remote foot plantingruns on each client from the replicated animator state; no separate foot drive state is sent (the PurrNet addon sends one)
Equip / unequipby container slot through HandItemSocket events
Item pickupdespawns the server object
Item dropspawns a networked WorldItem for all clients
Health (PlayerVitals)not synchronized
Camera & inputlocal-only: PlayerCameraController.SetLocalCameraActive; owner-only local input
Server sanity checksmovement validation; item RPCs rejected after an invalid teleport or non-finite transform

Not included by design#

Testing host & remote client#

The addon ships a prepared test setup. The scene is not in Build Settings, so add it before you build a remote client:

  • Scene: Assets/FBSystemFishNet/Testing/Demo.unity
  • Player: Assets/FBSystemFishNet/Testing/FBSystemNetworkPlayer.prefab
  • Collection: Assets/FBSystemFishNet/Testing/FBSystemFishNetPrefabs.asset

Host test in the editor#

  1. Open Demo.unity. It must contain the FishNet NetworkManager and its PlayerSpawner.
  2. Press Play. The HUD shows Start Server and Start Client. Start both for a host test.
  3. Verify movement, jump, sprint, crouch, root rotation, remote animator state and look pitch. The remote player must not process local input.
  4. Switch items (number keys, Q, or scroll) and verify equip/unequip on the other instance. Item use stays local.
  5. Stop the client first, then the server. Check the Console for bridge errors or movement-sanity warnings.

Remote-client test#

  1. Add Demo.unity to Build Settings and build it for Windows.
  2. Run the build as the client and the editor scene as the host.
  3. Start the server in the editor and the client in the build with the HUD buttons.
  4. Repeat the same verification as above across both instances.

Troubleshooting#

SymptomFix
PrefabId 65535 / NullReference on PlayerSpawner spawnRun the wizard's Validation step so PlayerSpawner holds a prefab asset (GeneratedPlayers/*_Network) registered in DefaultPrefabObjects, never a scene instance.
No Start Server / Start Client buttonsNetworkHudCanvas comes from FishNet/Demos/Prefabs. If you deleted the demos, the wizard warns: restore NetworkHudCanvas.prefab.
Remote head clips in FP / always hiddenThe player needs FPCutterController. The addon wires FishNetFPCutterVisibility to hide the head locally and show the full body on remotes.
Equip not syncingEquip must go through ItemContainer slots (HandItemSocket.EquipFromContainer). Direct socket attaches without a slot carry no slot index.
Item RPCs rejectedServer sanity check kicked in after an invalid teleport or non-finite transform. Fix the teleport driver before calling item code.