# Table of Contents
- [What Is FishNet? | Fish-Net: Networking Evolved](#what-is-fishnet-fish-net-networking-evolved)
- [Prefabs | Fish-Net: Networking Evolved](#prefabs-fish-net-networking-evolved)
- [ScriptableObjects | Fish-Net: Networking Evolved](#scriptableobjects-fish-net-networking-evolved)
- [Transports | Fish-Net: Networking Evolved](#transports-fish-net-networking-evolved)
- [Configuration and Tools | Fish-Net: Networking Evolved](#configuration-and-tools-fish-net-networking-evolved)
- [Features | Fish-Net: Networking Evolved](#features-fish-net-networking-evolved)
- [Benchmark Setup | Fish-Net: Networking Evolved](#benchmark-setup-fish-net-networking-evolved)
- [Fish-Networking vs Mirror | Fish-Net: Networking Evolved](#fish-networking-vs-mirror-fish-net-networking-evolved)
- [Unity Compatibility | Fish-Net: Networking Evolved](#unity-compatibility-fish-net-networking-evolved)
- [Performance | Fish-Net: Networking Evolved](#performance-fish-net-networking-evolved)
- [Legal Restrictions | Fish-Net: Networking Evolved](#legal-restrictions-fish-net-networking-evolved)
- [Business Support | Fish-Net: Networking Evolved](#business-support-fish-net-networking-evolved)
- [Branding | Fish-Net: Networking Evolved](#branding-fish-net-networking-evolved)
- [Pro, Projects, and Support | Fish-Net: Networking Evolved](#pro-projects-and-support-fish-net-networking-evolved)
- [Development | Fish-Net: Networking Evolved](#development-fish-net-networking-evolved)
- [Upcoming Releases | Fish-Net: Networking Evolved](#upcoming-releases-fish-net-networking-evolved)
- [Showcase | Fish-Net: Networking Evolved](#showcase-fish-net-networking-evolved)
- [Community Resources | Fish-Net: Networking Evolved](#community-resources-fish-net-networking-evolved)
- [Fish-Network-Discovery | Fish-Net: Networking Evolved](#fish-network-discovery-fish-net-networking-evolved)
- [Asset Integrations | Fish-Net: Networking Evolved](#asset-integrations-fish-net-networking-evolved)
- [Getting Connected | Fish-Net: Networking Evolved](#getting-connected-fish-net-networking-evolved)
- [Getting Started | Fish-Net: Networking Evolved](#getting-started-fish-net-networking-evolved)
- [Preparing Your Player | Fish-Net: Networking Evolved](#preparing-your-player-fish-net-networking-evolved)
- [Installing Fish-Networking | Fish-Net: Networking Evolved](#installing-fish-networking-fish-net-networking-evolved)
- [Common Tasks | Fish-Net: Networking Evolved](#common-tasks-fish-net-networking-evolved)
- [Using SyncVars to Sync Colors | Fish-Net: Networking Evolved](#using-syncvars-to-sync-colors-fish-net-networking-evolved)
- [Moving Your Player Around | Fish-Net: Networking Evolved](#moving-your-player-around-fish-net-networking-evolved)
- [Using the Scene Camera | Fish-Net: Networking Evolved](#using-the-scene-camera-fish-net-networking-evolved)
- [Connecting to Remote Devices | Fish-Net: Networking Evolved](#connecting-to-remote-devices-fish-net-networking-evolved)
- [Terminology | Fish-Net: Networking Evolved](#terminology-fish-net-networking-evolved)
- [Networking Models | Fish-Net: Networking Evolved](#networking-models-fish-net-networking-evolved)
- [Making a Custom Player Spawner | Fish-Net: Networking Evolved](#making-a-custom-player-spawner-fish-net-networking-evolved)
- [Simulating Bad Network Connections | Fish-Net: Networking Evolved](#simulating-bad-network-connections-fish-net-networking-evolved)
- [High-Level Overview | Fish-Net: Networking Evolved](#high-level-overview-fish-net-networking-evolved)
- [Updating FishNet | Fish-Net: Networking Evolved](#updating-fishnet-fish-net-networking-evolved)
- [Troubleshooting | Fish-Net: Networking Evolved](#troubleshooting-fish-net-networking-evolved)
- [Server Hosting | Fish-Net: Networking Evolved](#server-hosting-fish-net-networking-evolved)
- [Terminology | Fish-Net: Networking Evolved](#terminology-fish-net-networking-evolved)
- [Technical Limitations | Fish-Net: Networking Evolved](#technical-limitations-fish-net-networking-evolved)
- [Upgrading to FishNet Pro | Fish-Net: Networking Evolved](#upgrading-to-fishnet-pro-fish-net-networking-evolved)
- [Creating Bug Reports | Fish-Net: Networking Evolved](#creating-bug-reports-fish-net-networking-evolved)
- [Report Example | Fish-Net: Networking Evolved](#report-example-fish-net-networking-evolved)
- [Changes in API | Fish-Net: Networking Evolved](#changes-in-api-fish-net-networking-evolved)
- [PlayFlow Cloud (Recommended) | Fish-Net: Networking Evolved](#playflow-cloud-recommended-fish-net-networking-evolved)
- [NetworkHudCanvas | Fish-Net: Networking Evolved](#networkhudcanvas-fish-net-networking-evolved)
- [Getting Started with AWS | Fish-Net: Networking Evolved](#getting-started-with-aws-fish-net-networking-evolved)
- [Services | Fish-Net: Networking Evolved](#services-fish-net-networking-evolved)
- [NetworkManager | Fish-Net: Networking Evolved](#networkmanager-fish-net-networking-evolved)
- [Components | Fish-Net: Networking Evolved](#components-fish-net-networking-evolved)
- [Moving to Fish-Networking | Fish-Net: Networking Evolved](#moving-to-fish-networking-fish-net-networking-evolved)
- [DefaultPrefabObjects | Fish-Net: Networking Evolved](#defaultprefabobjects-fish-net-networking-evolved)
- [SinglePrefabObjects | Fish-Net: Networking Evolved](#singleprefabobjects-fish-net-networking-evolved)
- [DualPrefabObjects | Fish-Net: Networking Evolved](#dualprefabobjects-fish-net-networking-evolved)
- [Lag Compensation | Fish-Net: Networking Evolved](#lag-compensation-fish-net-networking-evolved)
- [ObserverConditions | Fish-Net: Networking Evolved](#observerconditions-fish-net-networking-evolved)
- [Easy WebGL Hosting with PlayFlow | Fish-Net: Networking Evolved](#easy-webgl-hosting-with-playflow-fish-net-networking-evolved)
- [Getting Started with PlayFlow | Fish-Net: Networking Evolved](#getting-started-with-playflow-fish-net-networking-evolved)
- [LevelLoggingConfiguration | Fish-Net: Networking Evolved](#levelloggingconfiguration-fish-net-networking-evolved)
- [OwnerOnlyCondition | Fish-Net: Networking Evolved](#owneronlycondition-fish-net-networking-evolved)
- [Network Collider | Fish-Net: Networking Evolved](#network-collider-fish-net-networking-evolved)
- [DistanceCondition | Fish-Net: Networking Evolved](#distancecondition-fish-net-networking-evolved)
- [SpawnablePrefabs | Fish-Net: Networking Evolved](#spawnableprefabs-fish-net-networking-evolved)
- [States | Fish-Net: Networking Evolved](#states-fish-net-networking-evolved)
- [Code Stripping (Pro Feature) | Fish-Net: Networking Evolved](#code-stripping-pro-feature-fish-net-networking-evolved)
- [GridCondition | Fish-Net: Networking Evolved](#gridcondition-fish-net-networking-evolved)
- [HostOnlyCondition | Fish-Net: Networking Evolved](#hostonlycondition-fish-net-networking-evolved)
- [FishyWebRTC | Fish-Net: Networking Evolved](#fishywebrtc-fish-net-networking-evolved)
- [Utilities | Fish-Net: Networking Evolved](#utilities-fish-net-networking-evolved)
- [MatchCondition | Fish-Net: Networking Evolved](#matchcondition-fish-net-networking-evolved)
- [NetworkCollision | Fish-Net: Networking Evolved](#networkcollision-fish-net-networking-evolved)
- [Prediction | Fish-Net: Networking Evolved](#prediction-fish-net-networking-evolved)
- [NetworkBehaviour | Fish-Net: Networking Evolved](#networkbehaviour-fish-net-networking-evolved)
- [Projectiles | Fish-Net: Networking Evolved](#projectiles-fish-net-networking-evolved)
- [Authenticator | Fish-Net: Networking Evolved](#authenticator-fish-net-networking-evolved)
- [ServerSpawner | Fish-Net: Networking Evolved](#serverspawner-fish-net-networking-evolved)
- [Raycast | Fish-Net: Networking Evolved](#raycast-fish-net-networking-evolved)
- [NetworkAnimator | Fish-Net: Networking Evolved](#networkanimator-fish-net-networking-evolved)
- [ColliderRollback (Pro Feature) | Fish-Net: Networking Evolved](#colliderrollback-pro-feature-fish-net-networking-evolved)
- [OfflineRigidbody | Fish-Net: Networking Evolved](#offlinerigidbody-fish-net-networking-evolved)
- [SceneCondition | Fish-Net: Networking Evolved](#scenecondition-fish-net-networking-evolved)
- [NetworkTrigger2D | Fish-Net: Networking Evolved](#networktrigger2d-fish-net-networking-evolved)
- [NetworkTransform | Fish-Net: Networking Evolved](#networktransform-fish-net-networking-evolved)
- [Yak (Pro Feature) | Fish-Net: Networking Evolved](#yak-pro-feature-fish-net-networking-evolved)
- [FishyUnityTransport | Fish-Net: Networking Evolved](#fishyunitytransport-fish-net-networking-evolved)
- [PredictedOwner | Fish-Net: Networking Evolved](#predictedowner-fish-net-networking-evolved)
- [DefaultScene | Fish-Net: Networking Evolved](#defaultscene-fish-net-networking-evolved)
- [PingDisplay | Fish-Net: Networking Evolved](#pingdisplay-fish-net-networking-evolved)
- [PlayerSpawner | Fish-Net: Networking Evolved](#playerspawner-fish-net-networking-evolved)
- [FishySteamworks (Steam) | Fish-Net: Networking Evolved](#fishysteamworks-steam-fish-net-networking-evolved)
- [Multipass | Fish-Net: Networking Evolved](#multipass-fish-net-networking-evolved)
- [FishyFacepunch (Steam) | Fish-Net: Networking Evolved](#fishyfacepunch-steam-fish-net-networking-evolved)
- [Bayou | Fish-Net: Networking Evolved](#bayou-fish-net-networking-evolved)
- [FishyRealtime (Photon) | Fish-Net: Networking Evolved](#fishyrealtime-photon-fish-net-networking-evolved)
- [NetworkTrigger | Fish-Net: Networking Evolved](#networktrigger-fish-net-networking-evolved)
- [Managers | Fish-Net: Networking Evolved](#managers-fish-net-networking-evolved)
- [Tick Smoothers | Fish-Net: Networking Evolved](#tick-smoothers-fish-net-networking-evolved)
- [NetworkObserver | Fish-Net: Networking Evolved](#networkobserver-fish-net-networking-evolved)
- [FishyEOS (Epic Online Services) | Fish-Net: Networking Evolved](#fishyeos-epic-online-services-fish-net-networking-evolved)
- [PredictedSpawn | Fish-Net: Networking Evolved](#predictedspawn-fish-net-networking-evolved)
- [NetworkTickSmoother | Fish-Net: Networking Evolved](#networkticksmoother-fish-net-networking-evolved)
- [NetworkCollision2D | Fish-Net: Networking Evolved](#networkcollision2d-fish-net-networking-evolved)
- [Tugboat | Fish-Net: Networking Evolved](#tugboat-fish-net-networking-evolved)
- [PredictionManager | Fish-Net: Networking Evolved](#predictionmanager-fish-net-networking-evolved)
- [BandwidthDisplay | Fish-Net: Networking Evolved](#bandwidthdisplay-fish-net-networking-evolved)
- [DetachableNetworkTickSmoother [Obsolete] | Fish-Net: Networking Evolved](#detachablenetworkticksmoother-obsolete-fish-net-networking-evolved)
- [NetworkManager | Fish-Net: Networking Evolved](#networkmanager-fish-net-networking-evolved)
- [OfflineTickSmoother | Fish-Net: Networking Evolved](#offlineticksmoother-fish-net-networking-evolved)
- [HashGrid | Fish-Net: Networking Evolved](#hashgrid-fish-net-networking-evolved)
- [ClientManager | Fish-Net: Networking Evolved](#clientmanager-fish-net-networking-evolved)
- [SceneManager | Fish-Net: Networking Evolved](#scenemanager-fish-net-networking-evolved)
- [DebugManager | Fish-Net: Networking Evolved](#debugmanager-fish-net-networking-evolved)
- [NetworkObject | Fish-Net: Networking Evolved](#networkobject-fish-net-networking-evolved)
- [TimeManager | Fish-Net: Networking Evolved](#timemanager-fish-net-networking-evolved)
- [RollbackManager (Pro Feature) | Fish-Net: Networking Evolved](#rollbackmanager-pro-feature-fish-net-networking-evolved)
- [StatisticsManager | Fish-Net: Networking Evolved](#statisticsmanager-fish-net-networking-evolved)
- [TransportManager | Fish-Net: Networking Evolved](#transportmanager-fish-net-networking-evolved)
- [ObserverManager | Fish-Net: Networking Evolved](#observermanager-fish-net-networking-evolved)
- [IntermediateLayer | Fish-Net: Networking Evolved](#intermediatelayer-fish-net-networking-evolved)
- [FAQ | Fish-Net: Networking Evolved](#faq-fish-net-networking-evolved)
- [ServerManager | Fish-Net: Networking Evolved](#servermanager-fish-net-networking-evolved)
- [MonoTickSmoother [Obsolete] | Fish-Net: Networking Evolved](#monoticksmoother-obsolete-fish-net-networking-evolved)
---
# What Is FishNet? | Fish-Net: Networking Evolved

[](https://fish-networking.gitbook.io/docs#overview)
Overview
------------------------------------------------------------------
Fish-Networking (FishNet) is an original free versatile networking solution for [Unity](https://unity.com/)
, built from the ground up, offering more features than any other free solution.
FishNet is server authoritative by design by allowing the use of dedicated servers, but does permit users to act as server and client, for faster development and testing. **There are no CCU caps or CCU paywalls in FishNet**, you can also use any server host you want to, including hosting the server yourself or letting your players do it.
Any kind of network topology is supported through the Transport system. Transports can use a variety of technologies to allow communications between server, client, and even third parties.
High-level API allows you to quickly access the ability to synchronize states, logic, objects, and more, without needing to get your hands dirty. We also believe in providing the best experience possible; you may additionally utilize low-level functionality via included events or inheritance.
[](https://fish-networking.gitbook.io/docs#no-break-promise)
No-break promise
----------------------------------------------------------------------------------
Developing projects can take a lot of time, and updating your networking solution along the way is often inevitable. Fish-Networking promises to not release any breaking API or behavior changes between major versions. Major releases will occur no more frequent than every six months, unless **absolutely necessary**.
When breaks do occur we will do our best to keep the changes simple. We also have our [Break Solutions](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-api)
section which will describe planned breaks, the next major release, and how to remedy breaks for each version.
[](https://fish-networking.gitbook.io/docs#long-term-support)
Long-Term support
------------------------------------------------------------------------------------
Fish-Networking is the only solution to offer free LTS. We will be using a unique but effective approach at creating LTS releases. Rather than the standard expectations of being locked into a version for long-term support, FishNet is providing what we refer to as 'Release' and 'Development' switches. Any version of Fish-Networking which ends in R supports switching between Release and Development features, for example: 3.10.7R.
With Fish-Networking Long-Term support does not mean being stuck on older versions! Whenever a change or new feature becomes available public you may disabled it at anytime. Disabling an upcoming change will suspend the changes and allow FishNet to operate on the proven stable version of the same feature. This allows you to stay on the latest releases to get the latest tech and bug fixes without worrying about each update breaking your project.
To toggle between beta features simply use the Fish-Networking menu in engine, choose Beta, and turn on or off each feature to your liking.
[](https://fish-networking.gitbook.io/docs#external-links)
External links
------------------------------------------------------------------------------
[](https://github.com/FirstGearGames/FishNet/)

Fish-Networking GitHub
[](https://assetstore.unity.com/packages/tools/network/fish-net-networking-evolved-207815)

Asset Store
[](https://discord.gg/Ta9HgDh4Hj)

Community Discord
[](https://fish-networking.gitbook.io/docs#community-made-resources)
Community made resources
--------------------------------------------------------------------------------------------------
There are many third-party add-ons, integrations, and resources that can aid you through your development. Many assets also have direct support for FishNet and work well together with it.
[Asset Integrations](https://fish-networking.gitbook.io/docs/overview/asset-integrations)
[Community Resources](https://fish-networking.gitbook.io/docs/overview/community-resources)
[](https://fish-networking.gitbook.io/docs#contributing-documentation)
Contributing documentation
------------------------------------------------------------------------------------------------------
We are now taking documentation contributions! If you'd like to include your own guide, or make edits to our current documentation, you can do so on our documentation GitHub [here](https://github.com/FirstGearGames/FishNet-Documentation)
.
[NextFeatures](https://fish-networking.gitbook.io/docs/overview/readme/features)
Last updated 1 month ago
---
# Prefabs | Fish-Net: Networking Evolved
FishNet has some helpful prefabs that can make development and testing quicker. They are located inside the `/FishNet/Demos/Prefabs` directory and can be dragged directly into your scene to be made use of.
[PreviousColliderRollback (Pro Feature)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback)
[NextNetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/prefabs/networkmanager)
Last updated 6 months ago
---
# ScriptableObjects | Fish-Net: Networking Evolved
Fish-Networking includes quite a few [ScriptableObjects](https://docs.unity3d.com/Manual/class-ScriptableObject.html)
that you can use to customize the behavior of specific features. There are default ones included with FishNet, but you can also create your own from the _**Assets → Create → FishNet**_ toolbar menu.

Create FishNet asset menu
[PreviousNetworkHudCanvas](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/prefabs/networkhudcanvas)
[NextObserverConditions](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions)
Last updated 5 months ago
---
# Transports | Fish-Net: Networking Evolved
The **Transport** is the low-level layer responsible for sending and receiving raw data over the network. It abstracts away the details of TCP/UDP sockets and handles packet delivery, reliability, ordering, etc. FishNet uses events internally to plug into transport messages. Although it be unlikely you would need to access such messages, they are available to you for your development as well.
There are many transports available, some are maintained by the Fish-Networking team and others maintained by the community.
[Tugboat](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat)
is the default transport and will be added to your project at runtime. If you wish to use a different transport or customize **Tugboat** you must add the component to your [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
object.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports#switching-transports-at-run-time-or-using-multiple-transports)
Switching transports at run-time or using multiple transports
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FishNet has support for changing transports on your NetworkManager while the network is not running as well as allowing servers to utilize multiple transports at once. For example you may want to use FishyEOS or Unity Transport to support your console users, but also use Tugboat to give a better experience to your Non-Console users.
FishNet uses the Multipass transport to achieve both of these goals.
Even with **Multipass**, clients can only ever utilize one active **transport**. More info can be found on the [Component](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/multipass)
and [Guide](https://fish-networking.gitbook.io/docs/guides/features/transports/multipass)
pages.
[PreviousLevelLoggingConfiguration](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration)
[NextTugboat](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat)
Last updated 1 month ago
---
# Configuration and Tools | Fish-Net: Networking Evolved
FishNet comes with some useful settings and editor tools to be used with it; these can be accessed through the (**Tools → Fish-Networking**) toolbar menu.

* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#beta)
Beta
----------------------------------------------------------------------------------------------------------
The settings here will vary depending on your FishNet version and will enable you to activate and deactivate the latest beta features. This can be helpful if you want to stay with the most tested code for you project or if alternatively if you want to try out features that are coming out soon.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#utility)
Utility
----------------------------------------------------------------------------------------------------------------
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#quality-of-life-attributes)
Quality of Life Attributes
With this option you will be able to disable and enable certain attributes FishNet uses. It's not recommended to use this unless a developer or community helper advises you do so for debugging purposes.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#upgrading-from-mirror)
Upgrading From Mirror
When converting a project from Mirror Networking, it can be helpful to use these tools.
####
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#replace-components)
Replace Components
This tool helps you replace common Mirror components with what FishNet may use instead.
####
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#remove-defines)
Remove Defines
This tool removes the many scripting defines that Mirror includes in your Unity project.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#refresh-default-prefabs)
Refresh Default Prefabs
This option will cause FishNet's [Default Prefab Objects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs/defaultprefabobjects)
tool to be refreshed by searching your project and keeping track of the Network Object Prefabs within it. This is done automatically for you, but you may want to trigger it if you start seeing the wrong prefabs being spawned in a client build or editor.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#reserialize-networkobjects)
Reserialize NetworkObjects
This tool allows you to reserialize prefabs and scenes. Most often you will use this if you get an error message by FishNet telling you to do so. It can also help you if you are running into errors reporting missing sceneids.
If you run it on the open scenes, be sure to save them after it runs.

* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#configuration)
Configuration
----------------------------------------------------------------------------------------------------------------------------
The FishNet configuration (available in the Project Settings) has options for FishNet Pro's **Code Stripping** feature as well as the Prefab Objects Generator and NetworkBehaviour Template.

####
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#code-stripping)
Code Stripping
FishNet Pro allows you to strip server-only code from non-server builds, this includes the code inside [ServerRpcs](https://fish-networking.gitbook.io/docs/guides/features/network-communication/remote-procedure-calls#serverrpc)
, [Server](https://fish-networking.gitbook.io/docs/guides/features/server-and-client-identification/executing-on-server-or-client#server-attribute)
marked methods, and server specific callbacks such as [OnStartServer](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#onstartserver)
and [OnSpawnServer](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#onspawnserver)
. You can use one of the two available methods for this, either **redirection** or **emptying.**
####
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#new-networkbehaviour-template)
New NetworkBehaviour Template
This allows you to customize the NetworkBehaviour asset template as well as choose a new location for it. If you want to create a NetworkBehaviour using this template, simply go to **Assets → FishNet → NetworkBehaviour Script.**
####
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#prefab-objects-generator)
Prefab Objects Generator
The Prefab Objects Generator is used by the [Default Prefab Objects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs/defaultprefabobjects)
search your project and keep track of the Network Object Prefabs within it. You can enable and disable it as well as enable and disable its logging.
The **Full Rebuild** option will tell FishNet to search all prefabs instead of just ones that were recently modified.
**Spawnable Only** instructs the generator to only find NetworkObject prefabs that have [IsSpawnable](https://fish-networking.com/FishNet/api/api/FishNet.Object.NetworkObject.html#FishNet_Object_NetworkObject_IsSpawnable)
enabled.
The **Default Prefab Objects Path** option allows you to change the default path of the asset in your Unity project.
And finally you can choose which folders to exclude or include when it searches for network prefabs.

* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#getting-started)
Getting Started
--------------------------------------------------------------------------------------------------------------------------------
The getting started option will show FishNet's **Getting Started** menu, giving you quick access to relevant FishNet links, including the Documentation, Discord, GitHub, and more.

[PreviousFishyRealtime (Photon)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyrealtime)
Last updated 12 days ago
---
# Features | Fish-Net: Networking Evolved
For a more exact feature comparison of various networking solutions please see this [comparison chart](https://docs.google.com/spreadsheets/d/1Bj5uLdnxZYlJykBg3Qd9BNOtvE8sp1ZQ4EgX1sI0RFA/edit#gid=233715429)
.
Performance and reliability are very important to us, but so is including great features to make your experience easier, and better. The last thing we want to do is create limitations; we support all features Mirror does, and then some.
Below is a comparison of unique and enhanced features, with more to come.
[](https://fish-networking.gitbook.io/docs/overview/readme/features#features-unique-to-fish-networking)
Features unique to Fish-Networking
-----------------------------------------------------------------------------------------------------------------------------------------------
> **Update Stability**
>
> Other solutions do not guarantee that their API will not change between releases, making it difficult and dangerous to update for fixes or features. Fish-Networking prides itself on it's [No-Break Promise](https://fish-networking.gitbook.io/docs#no-break-promise)
> , ensuring updates do not require alteration of user code, keeping you on-top with the best to offer.
> **Built-in Addressables Support**
>
> Unlike other networking solutions, Fish-Networking has addressables support included within core features. Addressable scenes are easily implemented with our network SceneManager, and addressable prefabs are supported as well.
> **Network Balancing**
>
> NetworkManagers are the center of your network environment. They contain other managers, and handle communications between the client and server. Fish-Networking allows an infinite number of NetworkManagers, allowing clients at once to connect to multiple different servers, to have each handle certain tasks or worlds. Various NetworkManagers may also be used to fit different game modes, transports, platforms, and a number of other tasks.
> **Local Remote Calls**
>
> Fish-Networking allows remote calls to run not only on their intended destination, but also on the caller as well. Typically you would have to copy logic into multiple methods to accomplish such a task, but Fish-Networking allows it to be done in one method. This drastically reduces potential errors in code, lines of code, and improves ease of use.
> **Multi-purpose Remote Calls**
>
> Target and Observers remote calls can be used interchangeable, in the same method. This allows you to use a single method to send data to one client or multiple clients. Like _**Local Remote Calls**_, this creates a more reliable code-base and improves the user experience.
> **Buffered Remote Calls**
>
> Often the last value of a remote call must be sent to newly joined clients. Fish-Networking is one of few solutions that offer this ability.
> **Client-side Prediction**
>
> Client-side prediction primarily focuses on ensuring players in your game cannot cheat a variety of movement types. This feature is an absolute must for any competitive game.
>
> Fish-Networking is the only free solution to provide built-in client-side prediction with only a few lines of code. Also, included are a variety of components for desynhronization smoothing, and rigidbody prediction.
> **Lag Compensation (pro feature)**
>
> Another very important feature for precision based gaming is lag compensation. This is the act of rolling back colliders in time to where a client had seen them; this ensures accurate hit registration. This technique is applicable to several genre types but is most commonly seen in shooter games.
> **Automatic Code Stripping (pro feature)**
>
> Code stripping helps protect your game server by removing sensitive logic that the player should not be aware of.
> **Large Packet Handling**
>
> In some scenarios you may need to send large amounts of data either to the client or server. Tests show Fish-Networking was able to effectively send anywhere from a few, to a few hundred megabytes over the network. Other solutions such as Mirror and even Fusion throw errors on the same job.
> **Reliable Order of Operations**
>
> Race conditions are possibly the worst kind of problems to solve, and it's especially frustrating when those race conditions are caused by someone else's software. Competitors such as Mirror have shown to have a variety of race conditions, such as networked objects referencing one-another before they actually exist.
>
> Fish-Networking ensures references cannot go missing, and that the reliability of operations and callbacks are consistent in all scenarios.
> **Child Network Components**
>
> Child Network Components allow for easier design and better code organization by using components such as Network Objects or Network Behaviours on child objects. Mirror for example requires all networked components to be placed on the root object, which could quickly clutter your work flow.
> **Custom SyncTypes**
>
> Custom SyncTypes allow you to create logic on how something may be updated over the network. For example: SyncVars, SyncList, SyncDictionaries are all custom SyncTypes included within Fish-Networking. If you would prefer a more hands-on/tailored experience you may create your own Custom SyncType using the exposed framework.
> **Dual Projects**
>
> Fish-Networking has limited support for dual projects. We recommend using a single project and utilize server defines along with our **automatic code stripping** feature.
> **Single, Additive, Stacked Scene Management**
>
> Scene management is essential for offline and online games. While other solutions such as Mirror, Fusion, and Netcode are limited to basic single scene management out of the box, Fish-Networking provides built-in logic to control seperation of clients through single, additive, and even stacked scenes. This is a powerful tool for world streaming, dungeon instances, lobbys and more.
> **Automatic Prefab Detection**
>
> Networking solutions such as Mirror require you to specify and organize networked object prefabs. This is a time consuming task which often requires dragging every prefab into a collection, or looking up prefabs by string before you may spawn them over the network. Fish-Networking strongly believes in ease-of-use, and part of that is having your networked prefabs automatically detected by our framework. Changes made to networked objects are automatically known and configured by Fish-Networking without requiring additional steps form the user.
> **Built-in, or Custom Object Pool**
>
> Included is the ability to automatically reset and pool network objects. Objects can be set to pool at runtime, or be pre-configured on the NetworkObject. Pooled objects automatically have their network values reset, including all SyncTypes on the object.
>
> Fish-Networking comes with a basic object pool but fully supports any object pool of your choice.
> **Zero Hotpath Allocations**
>
> Allocations can massively affect both server and client performance. While Mirror and Netcode allocate garbage regularly, Fish-Networking does not, ensuring better scalability and all-around performance.
> **Offline Networked Objects**
>
> In some instances an object may need to only exist locally, rather than over the network, and sometimes both. Fish-Networking allows users to default objects to being local only so that the objects network functionality is unused. In addition, these objects are intelligently synchronized over the network when the user shows such intent.
[](https://fish-networking.gitbook.io/docs/overview/readme/features#features-which-do-more-in-fish-networking)
Features which do more in Fish-Networking
-------------------------------------------------------------------------------------------------------------------------------------------------------------
> **Serializables**
>
> Fish-Networking supports more object types to be serialized than any other free solution. Dictionaries, scriptable objects, nullables and more can be automatically serialized in Fish-Networking. Solutions which have existed longer, such as Mirror, still require manual serialization of many types which Fish-Networking handles automatically.
> **Area of Interest System**
>
> Area of interest, often called AOI, controls which clients receive what information. AOI not only can prevent cheating by disallowing information clients get, but also drastically improve bandwidth and performance of the server by not sending unnecessary information to clients. Both Fish-Networking and Mirror support AOI, however in Mirror you may only use one AOI system at a time. For example, you can separate clients by scenes in Mirror, but you cannot also separate them by distance at the same time. In result if you have a larger world players will see each other at all times. Fish-Networking not only streamlines setting up the AOI system but allows multiple conditions to run at once, which would resolve the just mentioned Mirror problem. Fish-Networking's AOI system can also be easily customized with your own logic.
> **Reliable and Unreliable Remote Calls**
>
> Several networking solutions support reliable and unreliable remote calls, but Fish-Networking simplifies the process for users. In Mirror if you wish to have a remote call which can send both reliable and unreliable you must duplicate your logic into multiple methods, one for reliable and one for unreliable. Fish-Networking again saves on lines of code and risk of error by allowing a single remote call method to run both reliably and unreliably. You can change the reliability effortlessly at runtime as well.
> **SyncType Flexibility**
>
> [SyncTypes](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing)
> are another very common feature found in just about every high level library. However, very few solutions offer flexibility on how SyncTypes can be configured. Mirror for example can only send SyncTypes reliably, cannot adjust the interval per SyncType, has limited callbacks, and cannot control who receives the values of each SyncType. Fish-Networking on the other hand may send reliable or unreliable with eventual consistency. SyncType intervals can be different for each SyncType. Callbacks can occur on both the server and client. Each SyncType can be specified to go to only the owner, or all clients.
> **Tick Based**
>
> Tick based timings allow accurate simulation for client-side prediction, smooth transform replication, and a lot more. Fish-Networking has a strong and efficient tick based core to provide a smoother experience for both the developer and their players. Older networking solutions such as Mirror are not tick based, which results in sloppy simulations as well the inability to create a proper client-side prediction system.
> **Broadcasts and Messages**
>
> Fish-Networking supports broadcasts, interchangeably called messages. Broadcasts and messages are data which can be sent over the network without requiring a networked object receiver. These are useful for objects which you don't want networked but would still like to be able to communicate with, such as a door in your scene. Fish-Networking enhances this communication type by allowing multiple objects to utilize the same message. For example, in Fish-Networking all your scene doors could listen to the same message for updates; Mirror on the other hand only one door could listen to updates while you would have to create additional broadcast or message types for every single added door.
> **Original**
>
> Mirror, Netcode, and several other networking solutions are based off from previous works, some which are deprecated. Fish-Networking is made original from the ground up, with no prior solution's limitations to bog it down.
> **Anti-Singleton Design**
>
> Most networking solutions, even newer ones such as Netcode, use a singleton design pattern. Fish-Networking does not utilize singleton classes for it's managers, but still provides an easy way to access networking data from anywhere.
> **XML Documentation**
>
> An often unconsidered part of any project are the XML comments for it's API. Netcode, Mirror, and even Unity's official API have several parts which are not fully commented internally nor through the XML. Fish-Networking provides complete XML coverage with well thought-out descriptions to make developing easier without constantly have to jump through the source code or visit external sources.
[PreviousWhat Is FishNet?](https://fish-networking.gitbook.io/docs)
[NextUnity Compatibility](https://fish-networking.gitbook.io/docs/overview/readme/features/unity-compatibility)
Last updated 10 days ago
---
# Benchmark Setup | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/overview/readme/features/performance/benchmark-setup#setup)
**Setup**
---------------------------------------------------------------------------------------------------------------------
* New scene with Camera and directional light.
* 1 object per player connection.
* Object moves and rotates randomly.
* Object has a client authoritative NetworkTransform with 100ms send rate.
* Object sends two ServerRPCs a second.
* Server sends an ObserverRPC for every ServerRPC it receives.
* Every client is it's own executable.
* Server tick rate is set to 10 (every 100ms).
[](https://fish-networking.gitbook.io/docs/overview/readme/features/performance/benchmark-setup#gathering-results)
Gathering results
-----------------------------------------------------------------------------------------------------------------------------------------
Performance results are determined by setting a server at it's highest possible frame rate and comparing frame time as more variables or clients are introduced.
Bandwidth results are discovered by using tools which come with the operating system, and averaging bandwidth per second.
[](https://fish-networking.gitbook.io/docs/overview/readme/features/performance/benchmark-setup#scripts)
Scripts
---------------------------------------------------------------------------------------------------------------------
These are the scripts created specifically to benchmark and ensure test are performed equally.
**MovingAverage.cs**
Copy
using FishNet.Documenting;
using System;
using UnityEngine;
namespace FishNet.Managing.Timing
{
[APIExclude]
public class MovingAverage
{
#region Public.
///
/// Average from samples favoring the most recent sample.
///
public float Average { get; private set; }
#endregion
///
/// Next index to write a sample to.
///
private int _writeIndex;
///
/// Collected samples.
///
private float[] _samples;
///
/// Number of samples written. Will be at most samples size.
///
private int _writtenSamples;
///
/// Samples accumulated over queue.
///
private float _sampleAccumulator;
public MovingAverage(int sampleSize)
{
if (sampleSize < 0)
{
sampleSize = 0;
}
else if (sampleSize < 2)
{
if (NetworkManager.StaticCanLog(Logging.LoggingType.Warning))
Debug.LogWarning("Using a sampleSize of less than 2 will always return the most recent value as Average.");
}
_samples = new float[sampleSize];
}
///
/// Computes a new windowed average each time a new sample arrives
///
///
public void ComputeAverage(float newSample)
{
if (_samples.Length <= 1)
{
Average = newSample;
return;
}
_sampleAccumulator += newSample;
_samples[_writeIndex] = newSample;
// Increase writeIndex.
_writeIndex++;
_writtenSamples = Math.Max(_writtenSamples, _writeIndex);
if (_writeIndex >= _samples.Length)
_writeIndex = 0;
Average = _sampleAccumulator / _writtenSamples;
/* If samples are full then drop off
* the oldest sample. This will always be
* the one just after written. The entry isn't
* actually removed from the array but will
* be overwritten next sample. */
if (_writtenSamples >= _samples.Length)
_sampleAccumulator -= _samples[_writeIndex];
}
}
}
**DisplayPerformance.cs**
Copy
using UnityEngine;
using FishNet;
using FishNet.Managing.Timing;
public class DisplayPerformance : MonoBehaviour
{
public int TargetFrameRate = 60;
private float _nextDisplayTime = 0f;
private MovingAverage _average = new MovingAverage(3);
private uint _frames = 0;
private void Update()
{
#if UNITY_SERVER
Application.targetFrameRate = TargetFrameRate;
_frames++;
if (Time.time < _nextDisplayTime)
return;
_average.ComputeAverage(_frames);
_frames = 0;
// Update display twice a second.
_nextDisplayTime = Time.time + 1f;
double avgFrameRate = _average.Average;
// Performance lost.
double lost = avgFrameRate / (double)TargetFrameRate;
lost = (1d - lost);
// Replace this with the equivelent of your networking solution.
int clientCount = InstanceFinder.ServerManager.Clients.Count;
Debug.Log($"Average {lost.ToString("0.###")} performance lost with {clientCount} clients.");
#elif UNITY_EDITOR
// Max out editor frames to test client side scalability.
Application.targetFrameRate = 9999;
#else
/* Limit client frame rate to 15
* so your computer doesn't catch fire when opening
* hundreds of clients. */
Application.targetFrameRate = 15;
#endif
}
}
**SimulatePlayer.cs**
Copy
using FishNet.Object;
using UnityEngine;
public class SimulatePlayer : NetworkBehaviour
{
private float _nextMoveUpdate = 0f;
private float _nextRpc = 0f;
private Vector3 _posGoal;
private Quaternion _rotGoal;
private void Update()
{
if (!base.IsOwner)
return;
transform.position = Vector3.MoveTowards(transform.position, _posGoal, Time.deltaTime * 3f);
transform.rotation = Quaternion.RotateTowards(transform.rotation, _rotGoal, Time.deltaTime * 20f);
if (Time.time > _nextRpc)
{
_nextRpc = Time.time + 0.5f;
ServerRpc();
}
if (Time.time > _nextMoveUpdate)
{
bool rotate = (Random.Range(0f, 1f) <= 0.5f);
bool x = (Random.Range(0f, 1f) <= 0.5f);
bool y = (Random.Range(0f, 1f) <= 0.5f);
bool z = (Random.Range(0f, 1f) <= 0.5f);
if (!x && !y && !z)
x = true;
transform.position = _posGoal;
transform.rotation = _rotGoal;
float xPos = (x) ? Random.Range(-30f, 30f) : transform.position.x;
float yPos = (y) ? Random.Range(-30f, 30f) : transform.position.y;
float zPos = (z) ? Random.Range(-30f, 30f) : transform.position.z;
_nextMoveUpdate = Time.time + 2f;
_posGoal = new Vector3(xPos, yPos, zPos);
if (rotate)
_rotGoal = Quaternion.Euler(Random.Range(-80f, 80f),
Random.Range(-80f, 80f),
Random.Range(-80f, 80f)
);
}
}
[ServerRpc]
private void ServerRpc()
{
ObserversRpc();
}
[ObserversRpc]
private void ObserversRpc()
{
}
}
[PreviousPerformance](https://fish-networking.gitbook.io/docs/overview/readme/features/performance)
[NextFish-Networking vs Mirror](https://fish-networking.gitbook.io/docs/overview/readme/features/performance/fish-networking-vs-mirror)
Last updated 1 month ago
---
# Fish-Networking vs Mirror | Fish-Net: Networking Evolved
These benchmarks are very old. Server outbound bandwidth metrics have changed.
As of the date 2023/08/26 Mirror is believed to be approximately 5% more efficient in bandwidth, and Fish-Networking about 90-95% more efficient in bandwidth.
Example:
if Mirror previously sent 100mB/s they are now expected to send 95mB/s.
If Fish-Networking previously sent 100mB/s it would now send 5mB/s
[](https://fish-networking.gitbook.io/docs/overview/readme/features/performance/fish-networking-vs-mirror#versions)
Versions
---------------------------------------------------------------------------------------------------------------------------------
* Fish-Networking v1.4.3
* Mirror Networking v66.0.3
[](https://fish-networking.gitbook.io/docs/overview/readme/features/performance/fish-networking-vs-mirror#results)
Results
-------------------------------------------------------------------------------------------------------------------------------
**Hardware**
* Windows Server 2019
* AMD EPYC 7402P 24-Core (1 SLICE/CORE USED!)
* 2.00 GB RAM
**100 CCU Scaling**
* FishNet Server lost 1.5% of it's performance.
* FishNet Client ran at 1350 FPS.
* Mirror Server lost 29.5% of it's performance.
* Mirror Client ran at 791 FPS.
**200 CCU Scaling**
* FishNet Server lost 7.4% of it's performance.
* Mirror Server lost 83.2% of it's performance.
* Clients were untested.
**100 CCU Bandwidth**
* FishNet Server per second sent 7.3mB (adjusted 0.55mB) and received 1.1mB.
* Mirror Server per second sent 31.8mB (adjusted 30.2mB) and received 3.2mB.
**200 CCU Bandwidth**
* FishNet Server per second sent 29.9mB (adjusted 2.24mB) and received 2.2mB.
* Mirror Server per second sent 94.3mb (adjusted 89.6mB) and received 4.8mB.
**Spawned Network Objects (idle)**
Objects
Fish-Networking
Mirror
0
1.5ms
1.5ms
500
1.5ms
1.9ms
1000
1.5ms
2.2ms
2000
1.5ms
2.9ms
4000
1.5ms
4.2ms
**Results**
* Client FPS: FishNet clients achieved 70% more FPS than Mirror.
* Bandwidth: FishNet used 67-78% less bandwidth than Mirror.
* Server Performance(200 CCU): FishNet retained 92.6% server performance, while Mirror retained only 16.8% performance.
* Server Performance(4000 idle objects): FishNet retained 100% server performance, while Mirror retained only 36% performance.
[PreviousBenchmark Setup](https://fish-networking.gitbook.io/docs/overview/readme/features/performance/benchmark-setup)
[NextPro, Projects, and Support](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support)
Last updated 6 months ago
---
# Unity Compatibility | Fish-Net: Networking Evolved
Unity Version
FishNet Support
Unity 6+
All features work, fully supported.
Unity 2023.2+
All features work, fully supported.
Unity 2022.3+
All features work, fully supported.
Unity 2021.3+
All features work, fully supported.
Unity 2020 and earlier
Not supported.
[PreviousFeatures](https://fish-networking.gitbook.io/docs/overview/readme/features)
[NextPerformance](https://fish-networking.gitbook.io/docs/overview/readme/features/performance)
Last updated 6 months ago
---
# Performance | Fish-Net: Networking Evolved
Prior to Fish-Networking we developed assets for other solutions, such as Mirror Networking. These assets have proven to perform 4 times faster, and use little as 13% the bandwidth of Mirror's internal components. Unfortunately, third party assets can only go so far. This is strongly in part why Fish-Networking was made.
Fish-Networking has been designed with performance and bandwidth in mind. Features are regularly benchmarked for client and server performance, as well bandwidth consumption; these metrics are important while deploying. Better performance allows your project to run on cheaper hardware, and enables a higher concurrent user count. By using less bandwidth Fish-Networking reduces your server bills.
[](https://fish-networking.gitbook.io/docs/overview/readme/features/performance#server-and-host)
Bandwidth
---------------------------------------------------------------------------------------------------------------
**Networked Objects (moving)**
In most games moving objects will contribute the majority of used bandwidth. Fish-Networking's bandwidth consumption competes aggressively against modern paid solutions, and does better than any other free solution.
**Remote Procedure Calls**
Remote procedure calls, shortened to RPCs, are commonly placed second in bandwidth consumption. RPCs are used to communicate between the server and client. Fish-Networking uses only two bytes per RPC, while other free solutions use a minimum of 23 bytes.
[](https://fish-networking.gitbook.io/docs/overview/readme/features/performance#server-and-host-1)
CPU
-----------------------------------------------------------------------------------------------------------
Another very important aspect is how well the networking solution scales. A better scaling solution ensures it will run on less expensive hardware, and get you closer to your MMO goals.
####
[](https://fish-networking.gitbook.io/docs/overview/readme/features/performance#network-object-count-idle)
Network Object Count (idle)
It's not uncommon for frameworks to lose performance as more networked objects are spawned. Fish-Networking retains nearly 100% of it's performance regardless of how many objects are spawned.
####
[](https://fish-networking.gitbook.io/docs/overview/readme/features/performance#concurrent-users)
Concurrent Users
Fish-Networking retains a large amount of performance with hundreds of users updating every tick. Other networking solutions have shown to slow down drastically as more concurrent users join the server.
**Client Experience**
With more objects, users, or activity even clients can be affected by a poorly designed networking solution. Fish-Networking has scored roughly 70% more frames per second on clients than other free solutions, such as Mirror.
[PreviousUnity Compatibility](https://fish-networking.gitbook.io/docs/overview/readme/features/unity-compatibility)
[NextBenchmark Setup](https://fish-networking.gitbook.io/docs/overview/readme/features/performance/benchmark-setup)
Last updated 6 months ago
---
# Legal Restrictions | Fish-Net: Networking Evolved
There are no restrictions for personal and commercial use. Fish-Networking does not limit concurrent users. For the full license please see [https://github.com/FirstGearGames/FishNet/blob/main/LICENSE.md](https://github.com/FirstGearGames/FishNet/blob/main/LICENSE.md)
.
There are no fees for using Fish-Networking free. There are optional paid features, projects, and enhanced support tiers; more information on these may be found [here](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support)
. Any versions of Fish-Networking, free and Pro, are yours to keep.
For information on sharing Fish-Networking Pro please review the license link above.
You are not required nor will ever be asked to share any profits from your work. Fish-Networking is funded through community support.
[PreviousBranding](https://fish-networking.gitbook.io/docs/overview/readme/branding)
[NextShowcase](https://fish-networking.gitbook.io/docs/overview/showcase)
Last updated 4 months ago
---
# Business Support | Fish-Net: Networking Evolved
We offer a variety of business plans for those that wish exceptional support or priority on their needs. All business tiers come with life-time access to Pro updates, via github account.
Please contact FirstGearGames@gmail.com or FirstGearGames#0001 on Discord prior to purchasing plans, or for any questions you may have.
To subscribe to or view plan benefits please visit [https://github.com/sponsors/FirstGearGames](https://github.com/sponsors/FirstGearGames)
.
[PreviousPro, Projects, and Support](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support)
[NextDevelopment](https://fish-networking.gitbook.io/docs/overview/readme/development)
Last updated 2 years ago
---
# Branding | Fish-Net: Networking Evolved
We have a variety of images you may choose from for branding Fish-Networking.
You may not alter the colors nor design on the images provided.
You may resize images but not skew them such as by changing their aspect ratio.
[Branding Pack](https://fish-networking.com/FishNet/media/fishnet_media.zip)
[PreviousDevelopment](https://fish-networking.gitbook.io/docs/overview/readme/development)
[NextLegal Restrictions](https://fish-networking.gitbook.io/docs/overview/readme/legal-restrictions)
Last updated 3 months ago
---
# Pro, Projects, and Support | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#fishnet-pro)
FishNet Pro
-----------------------------------------------------------------------------------------------------------------
Some features are only available in Fish-Networking Pro.
All business [support tiers](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#support-tier-options)
also grant a complimentary lifetime Pro license.
We have an extremely flexible sharing license for Fish-Networking Pro, allowing teams and classrooms to work on a single purchase. You can view that license [here](https://github.com/FirstGearGames/FishNet/blob/main/LICENSE.md)
.
####
[](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#features-for-pro)
Features for Pro:
> **Lag Compensation**
>
> Another very important feature for precision-based gaming is [lag compensation](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback)
> . This is the act of rolling back colliders in time to where a client had seen them; this ensures accurate hit registration. This technique is applicable to several genre types but is most commonly seen in shooter games
> **Automatic Code Stripping**
>
> [Code stripping](https://fish-networking.gitbook.io/docs/guides/features/code-stripping)
> helps protect your game server by removing sensitive logic that the player should not be aware of. Far as we know, Fish-Networking is the only solution with the ability to remove server code from clients, and client code from the server.
> **Extrapolation, NetworkTransform**
>
> When enabled the [NetworkTransform](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform)
> will extrapolate as necessary to create a smoother experience for unstable connections.
> **Synchronized Parameters, NetworkAnimator**
>
> Customize which parameters are synchronized over the network on the [NetworkAnimator](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#synchronized-parameters-pro-feature)
> .
> **Yak**
>
> [Yak](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/yak-pro-feature)
> is a transport which provides an entirely offline experience using your multiplayer code. When combined with Multipass (available to free users), you may run your game offline or online.
[](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#paid-projects)
Paid projects
---------------------------------------------------------------------------------------------------------------------
Projects are completed Unity projects which act as a template or learning opportunity.
> **Lobby and Worlds**
>
> Lobby and Worlds is designed to use a single server for a lobby containing your players, as well create games on the same server using rooms created by your players. Each room is isolated from other players, both visually and in network traffic.
>
> Many aspects of the lobby can be customized to your needs. Lobby and Worlds allows you to design your game normally in it's own scenes, while the project takes care of everything else.
>
> Features include:
>
> * Loading any number of game scenes, multiple times; think dungeon instances!
>
> * Sign in system.
>
> * Lobby to create and join rooms.
>
> * Join rooms after start, optional.
>
> * Password rooms.
>
> * Ready up system, optional.
>
> * Kick players.
>
> * Player limits.
>
> * Customizable lobby logic and demo game.
>
FPS Land is not yet available for Fish-Networking V4. We are in the process of rewriting FPS Land to better take advantage of newer FishNet features.
Upon release, FPS Land V4 will be available to anyone that joined Pro tier from January 31st 2024 and onward, even if you are not currently a Pro subscriber.
FPS Land for Fish-Networking V3 is still available for download.
> **FPS Land**
>
> This project is a full server authoritative demo on how you may get started on creating a FPS game with Fish-Networking.
>
> Key points are:
>
> * Full server authoritative: movement, sound, firing, reloading, animations, ect.
>
> * Four weapon types: rifle, pistol, knife, and grenades.
>
> * Lag compensation for weapons such as rifles.
>
> * Lag compensation projectiles, such as grenades.
>
> * Picked up items.
>
> * Movement modifiers from weapon weight and walking.
>
> * Pet friendly goats.
>
[](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#support-tier-options)
Support tier options
-----------------------------------------------------------------------------------------------------------------------------------
All business [support tiers](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#support-tier-options)
also grant a complimentary lifetime Pro license.
> **Free Tier Support**
>
> * Discord: Multiple channels of support, with support provided by our community and helpers.
>
> * Unity Forum: support provided by our community and helpers.
>
> * Website(s): Documentation, Guides, and Videos available from our Team and Community
>
> **Priority Tier Support**
>
> * Everything in Free Tier.
>
> * Discord: Additional access to post in our Priority Support channel. This channel uses threads to keep each question individualized and sorted. The questions asked in Priority Support are prioritized by our helpers.
>
> * Projects: Access to projects that are completed Unity projects which act as a template or learning opportunity.
>
> * There are multiple priority tier options. Support quality is equal for all tiers. Priority tiers 2+ receive enhanced visibility within our Discord community to show off your support.
>
> **Business Support**
>
> * Everything in Free Tier
>
> * Everything in Priority Tier
>
> * Additional Enterprise Features, please view our monthly tiers on [GitHub](https://github.com/sponsors/FirstGearGames)
> to see what we offer per tier. For more information you may also email firstgeargames@gmail.com, or contact FirstGearGames on Discord.
>
[](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#purchasing)
Purchasing
---------------------------------------------------------------------------------------------------------------
There are a variety of ways to purchase Pro and Projects.
Please read the following very carefully to ensure you understand it fully. If you have questions please contact staff on [Discord](https://discord.gg/Ta9HgDh4Hj)
.
There are two types of purchases, **Fish-Networking Pro**, and **Projects**.
**Fish-Networking Pro** can be purchased from [GitHub](https://github.com/sponsors/FirstGearGames)
, [Patreon](https://www.patreon.com/firstgeargames)
, or the [Unity Asset Store](https://assetstore.unity.com/publishers/46529)
.
At this time **Projects** can only be purchased through GitHub and Patreon.
Once FPSLand V4 is complete, projects will be added to the asset store as well.
_Please consider making purchases through GitHub as our preferred platform, or Patreon. When purchased through GitHub or Patreon more of your support goes towards the developers and community helpers._
_In addition, GitHub and Patreon offer extra bonuses as a thank you!_
###
[](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#github-and-patreon-perks)
GitHub and Patreon perks
Becoming a supporter is designed to be indie-dev and budget friendly.
When obtaining Fish-Networking Pro through GitHub or Patreon you will have access to both Pro and Projects.
You **must** make a one-time payment of $10 for your initial downloads. Afterwards you're welcome to switch to $2/month for updates. You may leave the updates tier and join us again at any time.
When on any $10 tier or higher you will gain access to Priority Support, this includes your initial purchase; see [support tier options](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#support-tier-options)
for more information on this.
Business support tiers are **only** available on GitHub.
**Lifetime benefits:**
You can get bonus Priority Support months on GitHub!
Our one-time $60 GitHub option provides lifetime access to Pro and Project downloads, as well 8 total months of Priority Support, rather than 6 months of Priority Support when purchased monthly.
* Lifetime updates to both Pro and Projects can be obtained by supporting over-time, or by a one-time payment.
* Lifetime updates to projects are received after your total contributing meets $35.
* Lifetime updates to Fish-Networking Pro are received after your total contribution meets $60.
* Should you sponsor $200 at once or over-time, you will also gain lifetime access to Priority Support.
All higher tiers provide access to any content beneath them.
For example: If you have access to Fish-Networking Pro, you also have access to Projects.
###
[](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#unity-asset-store-perks)
Unity Asset Store perks
Asset store purchases provide lifetime updates to Fish-Networking Pro.
You can also gain access to Priority Support with your asset store purchase! Your priority support months begin only after you claim your perks on our Discord; see [After Purchasing](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#after-purchasing)
please.
The amount of months received are directly related to what goes back into the project after Unity's fees. If you purchase Fish-Networking Pro at $50 you will receive 4 months of Priority Support, and 2 months at $25.
[](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#after-purchasing)
After purchasing
---------------------------------------------------------------------------------------------------------------------------
Please be certain you read [Purchasing](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#purchasing)
thoroughly.
If you purchased through GitHub or Patreon your downloads will be available on our [website](https://fish-networking.com/)
.
If you purchased Fish-Networking Pro on the asset store, please use the asset store to download Fish-Networking Pro.
Keep in mind that you may change your support tier at anytime when joining us through GitHub or Patreon.
Do not forget your Discord roles!
You can claim supporter roles on our Discord no matter what purchase technique you use, but as previously said GitHub offers the most benefits per dollar.
Roles show off that you're a supporter, and are crucial for gaining you access to our priority help channels if you're on a Priority Support tier.
Business tiers are unique in that they receive dedicated channels. Please contact FirstGearGames on Discord to have your support channel created.
**How to claim your role:**
* **GitHub Instructions:** log into your downloads on our website. After logging in you will be shown a temporary Id above downloads. Copy this Id and direct message our Discord bot Sharky with it.
* **Patreon Instructions:** [**https://support.patreon.com/hc/en-us/articles/212052266-Getting-Discord-access**](https://support.patreon.com/hc/en-us/articles/212052266-Getting-Discord-access)
* **Asset Store Instructions:** Join our Discord and message Sharky your purchase invoice number.
[](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#more-information)
More information
---------------------------------------------------------------------------------------------------------------------------
For more detailed instructions of purchasing and installing FishNet Pro, checkout this guide: [Upgrading to FishNet Pro](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro)
[PreviousFish-Networking vs Mirror](https://fish-networking.gitbook.io/docs/overview/readme/features/performance/fish-networking-vs-mirror)
[NextBusiness Support](https://fish-networking.gitbook.io/docs/overview/readme/business-support)
Last updated 10 days ago
---
# Development | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/overview/readme/development#making-suggestions)
Making suggestions
------------------------------------------------------------------------------------------------------------------
The best way to make suggestions is to post on our [GitHub Discussions](https://github.com/FirstGearGames/FishNet/discussions)
page. Once posted you'll be able to follow comments and progress.
[](https://fish-networking.gitbook.io/docs/overview/readme/development#reporting-bugs)
Reporting bugs
----------------------------------------------------------------------------------------------------------
We appreciate all bug reports that our users may have, and make a strong effort to resolve them. We have a guide for how to post bug reports on our GitHub [here](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports)
.
[](https://fish-networking.gitbook.io/docs/overview/readme/development#making-code-contributions)
Making code contributions
--------------------------------------------------------------------------------------------------------------------------------
We welcome all kinds of code contributions to Fish-Networking, including bug fixes, new features, and improvements. We have bounties for any serious exploits that can be found and also miscellaneous bounties for other features. If you have something you'd like to work on, please head over to the [open-development](https://discord.com/channels/424284635074134018/923983677980045382)
channel in our [Discord community](https://discord.gg/Ta9HgDh4Hj)
and have a chat with us. We also welcome pull requests on our [GitHub Repository](https://github.com/FirstGearGames/FishNet/pulls)
.
[](https://fish-networking.gitbook.io/docs/overview/readme/development#making-documentation-improvements)
Making documentation improvements
------------------------------------------------------------------------------------------------------------------------------------------------
Our documentation is open-source, and we encourage our users to contribute content and fix any mistakes that it may contain. You can do so directly on the [Documentation GitHub Repository](https://github.com/FirstGearGames/FishNet-Documentation)
.
If you don't want to make changes you can also suggest documentation improvements on our [GitHub Discussions page](https://github.com/FirstGearGames/FishNet/discussions)
.
[](https://fish-networking.gitbook.io/docs/overview/readme/development#creating-guides-tutorials-samples-and-add-ons)
Creating guides, tutorials, samples, and add-ons
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
If you have a desire to create guides, tutorials, samples, or add-ons for FishNet, it would be most appreciated by us and the community. You can share such creations with the community directly in our Discord server, but you are also welcome to post them on YouTube, Itch.io, or any other site you want to.
If you want to use the FishNet branding in your creations, you can find it here: [Branding](https://fish-networking.gitbook.io/docs/overview/readme/branding)
[PreviousBusiness Support](https://fish-networking.gitbook.io/docs/overview/readme/business-support)
[NextBranding](https://fish-networking.gitbook.io/docs/overview/readme/branding)
Last updated 1 month ago
---
# Upcoming Releases | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#starlight-re-volver)
Starlight Re:Volver
----------------------------------------------------------------------------------------------------------------------------
Starlight Re:Volver is a 1-4 player co-op action roguelite, set in a nostalgic, anime-inspired MMO universe. Connect with other Divers in the city and explore dreamlike biomes, teaming up for thrilling adventures, minigames, fishing, and crafting.
[Starlight Revolversteam](https://store.steampowered.com/app/3201010/Starlight_ReVolver/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#ravenous-horde)
Ravenous Horde
------------------------------------------------------------------------------------------------------------------
Hunt zombies, become turned, kill hunters. In this round based multiplayer post-apocalyptic FPS you can play both sides, level up, unlock perks and weapons, customize and more.
[Ravenous Hordesteam](https://store.steampowered.com/app/2179490/Ravenous_Horde/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#skygard-arena)
Skygard Arena
----------------------------------------------------------------------------------------------------------------
Skygard Arena is a modern turn-based tactical RPG. Assemble your squad of Heroes, pick their items and spells, and outplay your opponent in fast-paced tactical battles. Discover the world of Skygard in a solo adventure or head straight to the Arena for thrilling PvP matches!
[Skygard Arenasteam](https://store.steampowered.com/app/2148970/Skygard_Arena/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#purrrifiers-cleaning-chaos)
Purrrifiers: Cleaning Chaos
-------------------------------------------------------------------------------------------------------------------------------------------
Purrrifiers is a hilarious 4-player co-op game about cleaning while causing chaos. Solve puzzles, drive quirky vehicles, use an array of cleaning tools and team up with adorable cats. Experience absurd humor, diverse locations, and non-stop fun as you collaborate or troll your way to cleaning glory!
[Purrrifiers: Cleaning Chaos – Cats & Goofylike Co-opsteam](https://store.steampowered.com/app/2117430/Purrrifiers_Cleaning_Chaos/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#goblin-cleanup)
Goblin Cleanup
------------------------------------------------------------------------------------------------------------------
A co-op cleaning game where you have to clean and rearrange a dungeon before the next adventurers come to complete it again.
[Goblin Cleanupsteam](https://store.steampowered.com/app/2748340/Goblin_Cleanup/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#cryptfall)
Cryptfall
--------------------------------------------------------------------------------------------------------
In this 4-player co-op survival craft game, you and your friends are trapped inside a cursed, ever-changing board game. As members of the Mystery Club, you must uncover the secrets of Cryptfall, craft powerful tools, and defeat terrifying Cryptids to escape—before the island consumes you!
[Cryptfallsteam](https://store.steampowered.com/app/2590560/Cryptfall/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#mithrall)
Mithrall
------------------------------------------------------------------------------------------------------
Welcome to Mithrall, an immersive large Scale Survival experience with sandbox survival elements and innovative server meshing. Build, battle, and explore in a vast, dynamic world against thousands. Forge your path to glory in a realm where every action shapes the adventure.
[Mithrallsteam](https://store.steampowered.com/app/2838890/Mithrall/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#blue-ridge-hunting)
Blue Ridge Hunting
--------------------------------------------------------------------------------------------------------------------------
Blue Ridge Hunting is a co-op horror game where you and your friends investigate, document, and hunt cryptids in the Appalachian Mountains.
[Blue Ridge Huntingsteam](https://store.steampowered.com/app/2434930/Blue_Ridge_Hunting/)
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#forging-ahead)
Forging Ahead
----------------------------------------------------------------------------------------------------------------
Your focus will be blacksmithing, crafting and shopkeeping. Use the in-game physics to smash and hit materials into new objects to sell at your shop! Upgrade and decorate your shop, all while mastering the fine arts of smithing and crafting. Throughout the game you will level and gain reputation in the town, to get better customers with higher requirements, but also higher pay. Use your gold on upgrading the shop, buying new materials or hiring adventurers to go and gather more rare resources for you.
[Forging Aheadsteam](https://store.steampowered.com/app/2349410/Forging_Ahead/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#forsaken-frontiers)
Forsaken Frontiers
--------------------------------------------------------------------------------------------------------------------------
Step into the frozen unknown in **Forsaken Frontiers**, a cooperative analog horror adventure set in the unforgiving embrace of an everlasting winter.
[Forsaken Frontierssteam](https://store.steampowered.com/app/2810780/Forsaken_Frontiers/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases#race-project)
Race Project
--------------------------------------------------------------------------------------------------------------
Race to win in multiple play modes of vehicular destruction. Pick up boosts, play with or against friends, and even make your own maps!
[Race Projectsteam](https://store.steampowered.com/app/1280590/Race_Project/)
[PreviousShowcase](https://fish-networking.gitbook.io/docs/overview/showcase)
[NextAsset Integrations](https://fish-networking.gitbook.io/docs/overview/asset-integrations)
Last updated 2 months ago
---
# Showcase | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/overview/showcase#schedule-1)
Schedule 1
----------------------------------------------------------------------------------------
You're a small-time drug dealer rolling into a fresh town with no cash, no product and no connections. Build your drug empire from the ground up in the grungy west-coast city of Hyland Point. Contend against intensifying law enforcement and deadly cartel competitors to expand your empire and reach the peak of the underworld.
[Schedule Isteam](https://store.steampowered.com/app/3164500/Schedule_I/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#mage-arena)
Mage Arena
----------------------------------------------------------------------------------------
A co-op PvP experience about using your voice to cast spells in the Mage Arena to settle an ages-old feud between sorcerers and warlocks.
[Mage Arenasteam](https://store.steampowered.com/app/3716600/Mage_Arena/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#moorhuhn-kart-4)
Moorhuhn Kart 4
--------------------------------------------------------------------------------------------------
The world's craziest chicken is heading back to the racetrack! Wacky characters, cool tracks and karts, and zany items await in a worldwide online battle for first place!
[Moorhuhn Kart 4steam](https://store.steampowered.com/app/3012980/Moorhuhn_Kart_4/)
[](https://fish-networking.gitbook.io/docs/overview/showcase#potion-shop-simulator)
Potion Shop Simulator
--------------------------------------------------------------------------------------------------------------
Master the art of alchemy in Potion Shop Simulator, a unique blend of simulation and strategy. Brew potions, manage your shop, and cater to a magical clientele in a single-player or co-op experience of the medieval fantasy world.
[Potion Shop Simulatorsteam](https://store.steampowered.com/app/2788920/Potion_Shop_Simulator/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#hellcome)
Hellcome
------------------------------------------------------------------------------------
SURVIVE TOGETHER! Hellcome is a top-down 4 multiplayer zombie survival party game. Enjoy a healthy selection of levels, characters, weapons, upgrades and more.\\
[Hellcomesteam](https://store.steampowered.com/app/2294550/Hellcome/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#arcade-sundown)
Arcade Sundown
------------------------------------------------------------------------------------------------
Arcade Sundown is a new type of sports game that combines pinball mechanics with the ridiculous spectacle that is bubble soccer. The gameplay is fast-paced, offensive, and chaotic in a way that is quickly hilarious – for players and spectators alike.
[Arcade Sundownsteam](https://store.steampowered.com/app/2003990/Arcade_Sundown/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#fas-fight-action-sandbox)
FAS: Fight Action Sandbox
---------------------------------------------------------------------------------------------------------------------
FAS is a unique turn-based fighting game where you design your characters and their abilities. Fight against AI or friends!
[FAS: Fight Action Sandboxsteam](https://store.steampowered.com/app/2302820/FAS_Fight_Action_Sandbox/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#golfie)
Golfie
--------------------------------------------------------------------------------
Golfie is a run-based, roguelike minigolf deck builder. Play through procedurally-generated levels, build a deck of crazy card abilities, and try to beat all 18 holes.
[Golfiesteam](https://store.steampowered.com/app/1579020/Golfie/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#cat-warfare)
Cat Warfare
------------------------------------------------------------------------------------------
What's more chaotic than a cat, with a rocket launcher? Play through the eyes of a weaponized feline in this Quake-like first person shooter.
[Cat Warfaresteam](https://store.steampowered.com/app/923370/Cat_Warfare/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#extreme-tag)
Extreme Tag!
-------------------------------------------------------------------------------------------
**Extreme Tag!** is a casual party game for all! Run from tagged players to stay alive. Last one standing wins!
[Extreme Tag!steam](https://store.steampowered.com/app/2207750/Extreme_Tag/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#guns-blocks-and-steel)
Guns, Blocks, and Steel
----------------------------------------------------------------------------------------------------------------
A tactical multiplayer FPS created by a solo developer as a passion project. Featuring a fully destructible, block-based environment. Gather resources to produce weapons, ammo, and vehicles. Play multiplayer PVP/co-op or singleplayer with bots.
[Guns, Blocks, and Steelsteam](https://store.steampowered.com/app/3161460/Guns_Blocks_and_Steel/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#marble-smashers)
Marble Smashers
--------------------------------------------------------------------------------------------------
Marble Smashers is a 3D fighting game for 2-4 players where the goal is to knock out your opponents off the stage and be the last one standing. Do what you must with your limited moveset and stage objects to ensure your victory!
[Marble Smasherssteam](https://store.steampowered.com/app/2076070/Marble_Smashers/)
[](https://fish-networking.gitbook.io/docs/overview/showcase#chess-for-idiots)
Chess For Idiots
----------------------------------------------------------------------------------------------------
The first intellectually non-discriminatory chess variant. Instead of thinking, just move your pieces in one of the many absurd ways!
[Chess for idiotssteam](https://store.steampowered.com/app/2121150/Chess_for_idiots/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#snow-folks)
Snow Folks
----------------------------------------------------------------------------------------
Discover the magic of a winter wonderland with Snow Folks! You can build snow forts, houses and anything you can imagine. Get creative with your friends, build your own castle, have the ultimate snowball fight, or play solo and create your own snow day adventure!

[Snow Folkssteam](https://store.steampowered.com/app/2241800/Snow_Folks/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#meow-meow-wizard-arena)
Meow Meow Wizard Arena
----------------------------------------------------------------------------------------------------------------
Meow Meow Wizard Arena brings a fun game with excellent feeling controls to mobile. In this game of cats you get to practice magic, and fight other cats, for no other reason than being a cat. Choose from beautiful outfits or create your own costumes! Breed your powerful cats to create even more powerful offspring.
[Katsi Kingdomssteam](https://store.steampowered.com/app/2326860/Meow_Meow_Wizard_Arena/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#one-up)
One Up
--------------------------------------------------------------------------------
The goal is simple, try to reach the top, _try_ being the operative word. Test your agility as a werewolf, a cow, or a strikingly hansom man wearing a cape. With over 500,000 downloads you'll have a hard time putting this one down.

[One Up - Apps on Google PlayGooglePlay](https://play.google.com/store/apps/details?id=com.HitGamingStudio.OneUp)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#locosoccer)
LOCOSOCCER
----------------------------------------------------------------------------------------
LOCOSOCCER is a crazy fast-paced physics-based casual football game that you can play everywhere with anybody or against anybody.
[LOCOSOCCER 2steam](https://store.steampowered.com/app/2173530/LOCOSOCCER/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#internet.game-saw)
Internet.Game: SAW
-------------------------------------------------------------------------------------------------------
Competitive games relying on Fish-Networking's tick system and server authoritative abilities. Internet.Game introduces high-value puzzle and skill-based games with cash prizes.
Partnered with big names LIONSGATE, Twisted Pictures, GameStop, Authograph, and Magic Eden.
[https://internet.game](https://internet.game/)

* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#valkyrie-champions)
Valkyrie Champions
--------------------------------------------------------------------------------------------------------
Valkyrie Champions is a mission-based Hero Shooter with an emphasis on upgrades and progression. Choose your champion and fight solo or with up to 4 online friends against huge amounts of enemies and ultimately save the lands against evil!
Each champion has unique abilities and stats which can be customized with equipment, power-ups, and talent trees.
Valkyrie Champions Trailer.
[Valkyrie Championssteam](https://store.steampowered.com/app/2027560/Valkyrie_Champions/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#arcadius)
Arcadius
------------------------------------------------------------------------------------
The Arcadius development team made a decision to switch to Fish-Networking after experiencing server crashes and costly server fees on Mirror networking. After switching to Fish-Networking the Arcadius team was able to increase their CCU limit from 40 to 500 without any problems, and are now saving over 75% in server fees.
Arcadius Trailer
[Arcadiussteam](https://store.steampowered.com/app/1105130/Arcadius/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/showcase#plethora)
Plethora
------------------------------------------------------------------------------------
Plethora is a MMO made with Fish-Networking, utilizing our built-in client-side prediction system. Within Plethora players can compete in hypercasual mini-games, with the potential to win valueable NTFs and minting rights from other NFT projects. Plethora offers bi-weekly competitions, leaderboards, and even daily quests for regular players.
[https://plethora.game/](https://plethora.game/)

[PreviousLegal Restrictions](https://fish-networking.gitbook.io/docs/overview/readme/legal-restrictions)
[NextUpcoming Releases](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases)
Last updated 2 months ago
---
# Community Resources | Fish-Net: Networking Evolved
If you have a contribution you would like to add to this page, please feel free to open a pull-request on the [documentation repository](https://github.com/FirstGearGames/FishNet-Documentation)
or [leave us a suggestion](https://github.com/FirstGearGames/FishNet/discussions)
.
The following resources are put together by developers such as yourself. The Fish-Networking team has no official involvement in this resources, thus we may not be able to troubleshoot or resolve any issues you experience with them.
[](https://fish-networking.gitbook.io/docs/overview/community-resources#videos)
Videos
-------------------------------------------------------------------------------------------
####
[](https://fish-networking.gitbook.io/docs/overview/community-resources#networking-concepts-and-fundamentals)
Networking Concepts and Fundamentals
[I Shot You First: Networking the Gameplay of Halo: Reach](https://www.youtube.com/watch?v=h47zZrqjgLc)
by GDC. GDC cover a range of developmental topics including game design, programming, audio, visual arts, business management, production, online games, and much more.
[Winterbolt Games YouTube](https://www.youtube.com/watch?v=8YtsHYCmsVA&list=PLmy1vWssxK4Mw-xIybZuY1lxAPEcSsKsE)
educates on a variety of Fish-Networking topics in great detail. If you're looking for step by step teachings, this is the spot.
[Fuzzy Man Studios YouTube](https://www.youtube.com/watch?v=594e5Z17o8Y&list=PLkZBdk5FMKnzFk2NM_fzMOjVLGTK1P385)
is a great landing page for visual scripting coders. The author uses visual scripting to cover a variety of tasks commonly needed to network your game.
[Bobsi's FPS tutorial series](https://www.youtube.com/playlist?list=PLF6lFlLzb6CTqcT6Xtv98G_a8FZS9_Fu8)
shows how to make a simple client-auth First Person Shooter game using FishNet.
[Let's explore Unity!](https://www.youtube.com/@letsexploreunity6438)
has a tutorial series in German covering FishNet.
[PreviousFish-Network-Discovery](https://fish-networking.gitbook.io/docs/overview/asset-integrations/fish-network-discovery)
[NextGetting Started](https://fish-networking.gitbook.io/docs/tutorials/getting-started)
Last updated 5 months ago
---
# Fish-Network-Discovery | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/overview/asset-integrations/fish-network-discovery#general)
General
-------------------------------------------------------------------------------------------------------------------
Fish-Networking-Discovery allows you to find and connect to devices on the same network without needing to adjust firewall or router rules
* * *
[](https://fish-networking.gitbook.io/docs/overview/asset-integrations/fish-network-discovery#compatibility)
Compatibility
-------------------------------------------------------------------------------------------------------------------------------
System
Supported?
Windows
Fully Supported
MacOS
Fully Supported
IOS
Fully Supported
Android
Fully Supported
Linux
Fully Supported
Xbox
Not Supported
Playstation
Not Supported
Nintendo
Not Supported
* * *
[](https://fish-networking.gitbook.io/docs/overview/asset-integrations/fish-network-discovery#how-to-install)
How to Install
---------------------------------------------------------------------------------------------------------------------------------
For installation and usage instructions please visit the GitHub page.
Main: [https://github.com/Abdelfattah-Radwan/Fish-Networking-Discovery](https://github.com/Abdelfattah-Radwan/Fish-Networking-Discovery)
Fork: [https://github.com/FirstGearGames/Fish-Networking-Discovery/](https://github.com/FirstGearGames/Fish-Networking-Discovery/)
* * *
[](https://fish-networking.gitbook.io/docs/overview/asset-integrations/fish-network-discovery#component-settings)
Component Settings
-----------------------------------------------------------------------------------------------------------------------------------------

Default Fish Network Discovery
* **Secret:** Secret Message to use when advertising or searching for servers
* **Port:** Port to use when advertising or searching for servers
* **Search Timeout:** How long (in seconds) to wait for a response when advertising or searching for servers
* **Automatic:** If true, will automatically start advertising or searching for servers when the NetworkManager starts or stops.
[PreviousAsset Integrations](https://fish-networking.gitbook.io/docs/overview/asset-integrations)
[NextCommunity Resources](https://fish-networking.gitbook.io/docs/overview/community-resources)
Last updated 5 months ago
---
# Asset Integrations | Fish-Net: Networking Evolved
If you have a contribution you would like to add to this page, please feel free to open a pull-request on the [documentation repository](https://github.com/FirstGearGames/FishNet-Documentation)
or [leave us a suggestion](https://github.com/FirstGearGames/FishNet/discussions)
.
The following resources are put together by developers such as yourself. The Fish-Networking team has no official involvement in this resources, thus we may not be able to troubleshoot or resolve any issues you experience with them.
[](https://fish-networking.gitbook.io/docs/overview/asset-integrations#asset-integrations)
Asset integrations
------------------------------------------------------------------------------------------------------------------
[MetaVoiceChat](https://github.com/Metater/MetaVoiceChat)
is a completely **free,** simple, and self-contained proximity voice chat solution for Unity's popular client-server networking libraries with all of the features you need.
[Dissonance Voice Chat](https://assetstore.unity.com/packages/tools/audio/dissonance-voice-chat-70078)
is a real-time Voice over IP (VoIP) system designed to be built directly into Unity games. [Dissonance Voice Chat for Fish-Networking](https://github.com/LambdaTheDev/DissonanceVoiceForFishNet)
is a community integration for using it with FishNet, provided by [LambdaTheDev](https://github.com/LambdaTheDev)
and the creator of Dissonance.
[Turtle Pass](https://github.com/DanielSnd/TurtlePass)
allows you to send large byte arrays over several frames to prevent data from overwhelming bandwidth limited transports like Steam and Unity Transport.
[Network Audio Sync](https://github.com/LambdaTheDev/NetworkAudioSync)
is an easy to way synchronize audio clips over the network.
[Master Server Toolkit](https://assetstore.unity.com/packages/tools/network/master-server-toolkit-194832)
is a powerful solution to many back-end problems you may encounter when developing multiplayer games or applications. Master Server Toolkit includes but is not limited to: user registration and authorization, game server list, user data management, database interactions, chats and chat channels. There is a variety of modular functionality available within this asset. **A Fish-Networking demo is included!**
[Network Particle System](https://github.com/celojevic/NetworkParticleSystem)
will synchronize particles, lifespan, and more.
[GameKit for Fish-Networking](https://github.com/FirstGearGames/GameKit)
is an efficient solution to managing inventory, chat, and several other common multiplayer game mechanics. GameKit is well commented and is intended to be used as a learning resource to dive into.
[ParrelSync](https://github.com/VeriorPies/ParrelSync)
allows you to run multiple editors of the same project, making multiplayer testing easier.
[MultiPlay](https://assetstore.unity.com/packages/tools/utilities/multiplay-170209)
let's you open multiple Unity editor windows to test multiplayer games without building every time.
[Facepunch.Steamworks](https://github.com/Facepunch/Facepunch.Steamworks)
is a C# wrapper on top of Valve's steamwork library.
[Steamworks.NET](https://github.com/rlabrecque/Steamworks.NET)
is a C# Wrapper for Valve's Steamworks API, it can be used either with Unity or your C# based Application.
[Toolkit for Steamworks 2025](https://assetstore.unity.com/packages/tools/integration/toolkit-for-steamworks-2025-299310)
is a powerful set of tools, systems and editor extensions to make you integration with the Steam API easier, faster, and more robust. Make the most of Steam for your game!
[Steamworks Foundation](https://github.com/heathen-engineering/Toolkit-for-Steamworks-Foundation)
is a free, limited version of Toolkit for Steamworks.
[Fish-Networking-Discovery](https://fish-networking.gitbook.io/docs/overview/asset-integrations/fish-network-discovery)
is a simple LAN network discovery component for Fish-Networking.
[Vault Inventory](https://assetstore.unity.com/packages/tools/game-toolkits/vault-inventory-93933)
supports your design requirements from Editor to Runtime with an intuitive designer dashboard and runtime UI components / prefabs for a smooth multiplayer inventory experience.
[Edgegap's](https://assetstore.unity.com/packages/tools/network/edgegap-game-server-hosting-212563)
Unity plugin makes game server hosting and orchestration easy and simple.
[PlayFlow Cloud](https://assetstore.unity.com/packages/tools/network/playflow-cloud-206903)
simplifies multiplayer game server hosting. Use the PlayFlow Cloud Unity Plugin to spin-up multiplayer game servers for your Unity game.
[Crayon: Multiplayer Coloring & Voting Game Template](https://assetstore.unity.com/packages/templates/packs/crayon-multiplayer-coloring-voting-game-template-279432)
is a Unity Asset Store template designed for multiplayer coloring and voting gameplay, providing a foundation for developers to create interactive art-based games.
[COZY: Stylized Weather 3](https://assetstore.unity.com/packages/tools/utilities/cozy-stylized-weather-3-271742)
is a customizable weather system designed for game developers, offering dynamic time-of-day cycles, seasonal transitions, and diverse atmospheric effects for fully tailored environments. It has a multiplayer module that supports FishNet: [COZY: Link - Multiplayer Module](https://assetstore.unity.com/packages/tools/network/cozy-link-multiplayer-module-238669)
[Master Audio 2024: AAA Sound](https://assetstore.unity.com/packages/tools/audio/master-audio-2024-aaa-sound-287785)
is a powerful audio framework for Unity, offering real-time parameter commands, full multiplayer functionality, and advanced occlusion features. It supports all platforms and integrates seamlessly with FishNet.
[Multiplayer for Malbers Character Controller](https://assetstore.unity.com/packages/tools/integration/multiplayer-for-malbers-character-controller-300747)
is a networking integration for Animal Controller, designed to work with FishNet. It extends MalberS to support multiplayer functionality with minimal workflow changes.
[Smooth Sync](https://assetstore.unity.com/packages/tools/network/smooth-sync-96925)
is a network synchronization tool for Unity that enhances object movement across multiplayer sessions. It improves NetworkTransform by offering better configurability, reduced bandwidth usage, and smoother, more accurate syncing for Rigidbodies and Transforms, making it ideal for vehicles, character controllers, and physics-based objects.
[Fish-Networking-Discovery](https://fish-networking.gitbook.io/docs/overview/asset-integrations/fish-network-discovery)
is a lightweight LAN network discovery component designed for Fish-Networking, enabling seamless local multiplayer connectivity with minimal setup.
[](https://fish-networking.gitbook.io/docs/overview/asset-integrations#transports)
Transports
--------------------------------------------------------------------------------------------------
There are a variety of transports that can be implemented in your project for uses such as WebGL, Steam, Unity Relay, and more. For a complete collection see: [Transports](https://fish-networking.gitbook.io/docs/guides/high-level-overview/transports)
.
[PreviousUpcoming Releases](https://fish-networking.gitbook.io/docs/overview/showcase/upcoming-releases)
[NextFish-Network-Discovery](https://fish-networking.gitbook.io/docs/overview/asset-integrations/fish-network-discovery)
Last updated 1 month ago
---
# Getting Connected | Fish-Net: Networking Evolved
1
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/getting-connected#creating-the-networkmanager)
**Creating the NetworkManager**
The **NetworkManager** is a central component of FishNet that manages the networking lifecycle, including establishing connections, hosting sessions, and handling client-server communication. For convenience, FishNet has a ready-made NetworkManager prefab that you can use. You can find the prefab located in the FishNet directory under `Demos/Prefabs/NetworkManager.prefab`. Drag and drop this NetworkManager prefab into your Unity scene.

Adding the NetworkManager prefab
If you imported FishNet from the git URL instead of the asset store or .unitypackage file, then the location of the FishNet directory will be `Packages/FishNet: Networking Evolved` instead of `Assets/FishNet`
2
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/getting-connected#configuring-fishnet-to-auto-start)
**Configuring FishNet to auto start**
The **NetworkHudCanvas** is a user interface provided by the example **NetworkManager** designed for quick testing of network connections. It displays buttons to start as a client and/or server. It also allows you to automatically start as a server, client, or host as soon as the **NetworkManager** loads in the game.
Expand the **NetworkManager's** fold-out icon to see its child game objects and select the **NetworkHudCanvas** game object. Find the **Network Hud Canvases** component on the object and set the **Auto Start Type** to **Host**.
This configuration will ensure that the application automatically starts as a host (a server and a client at the same time) when the scene is loaded.

Setting the Auto Start Type
3
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/getting-connected#testing-the-connection)
**Testing the connection**
Once everything is set up, press the Play button in Unity's Editor to launch your scene.
The two Server and Client buttons in the top left of the game window should turn blue to indicate that the server and both active.
If the buttons do not look like the example image then it just means your project is using Unity's new input system package; this is not a problem and you can simply check if the server and client are started by the button names being "Stop Server" and "Stop Client" respectively.
Additionally the console will log some network-related messages. Successful connection messages should appear, indicating that the host and client are running properly.

Successful connection logs
You willl see following warning: "Player prefab is empty and cannot be spawned for connection 0."
This is fine and will be dealt with in the next section.
By following these steps, you should now have a functional network setup in your Unity project using FishNet. This guide provides the foundation for more complex networking workflows, such as syncing objects and managing connections.
Download the project files with these completed steps here, or explore the repository:
[Source Files](https://github.com/maxkratt/fish-networking-getting-started/releases/download/getting-connected/getting-connected-complete.unitypackage)
[Repository](https://github.com/maxkratt/fish-networking-getting-started/tree/getting-connected)
[PreviousInstalling Fish-Networking](https://fish-networking.gitbook.io/docs/tutorials/getting-started/installing-fish-networking)
[NextPreparing Your Player](https://fish-networking.gitbook.io/docs/tutorials/getting-started/preparing-your-player)
Last updated 1 month ago
---
# Getting Started | Fish-Net: Networking Evolved

###
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started#what-to-expect)
What to expect
This section introduces key features of Fish-Networking that you'll use frequently in your development journey. You'll find dedicated resources to deepen your understanding and step-by-step guides tailored for common first-time tasks.
By following this guide, you'll gain insight into setting up your project, getting your clients connected to your server, and leveraging core networking capabilities.
If you're ready to dive in, let’s get started on building robust networked applications with Fish-Networking!
[PreviousCommunity Resources](https://fish-networking.gitbook.io/docs/overview/community-resources)
[NextInstalling Fish-Networking](https://fish-networking.gitbook.io/docs/tutorials/getting-started/installing-fish-networking)
Last updated 1 month ago
---
# Preparing Your Player | Fish-Net: Networking Evolved
For many games you will want to have a player object for each client. This guide will walk you through the process step by step.
Before You Begin Ensure that you're **not in Play Mode** in the Unity Editor. Making changes during Play Mode will not persist after exiting.
1
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/preparing-your-player#create-a-player-game-object)
Create a player game object
In the Unity Scene Hierarchy, create a new 3D object of type **Capsule**. Select the capsule in the Hierarchy and rename it to **Player**. In the **Inspector**, click on **Add Component** and search for **NetworkObject**. Add the **NetworkObject** component to the capsule.
The **NetworkObject** component is required for linking a game object over the network. It enables the object to synchronize its state across clients and the server.

NetworkObject component added to capsule
2
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/preparing-your-player#setup-the-player-object-for-spawning)
Setup the player object for spawning
Drag the player game object into the project window to turn it into a prefab, then delete the game object from the scene.

Turn the player object into a prefab
Select the NetworkManager in the scene and assign your new Player prefab into the **Player Prefab** field on the **PlayerSpawner** component.

Assign player prefab in PlayerSpawner
3
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/preparing-your-player#add-spawn-points)
Add spawn points
Create two empty Game Objects in the scene to act as spawn points. Position them where you'd like players to spawn on the map. Add these Game Objects as **Transform** references to the **PlayerSpawner** component in the **Spawns** list field.
The **PlayerSpawner** uses these transforms to determine spawn locations, choosing them in order from top to bottom for each subsequent player and beginning again after reaching then final spawn point. If no spawn points are specified, the spawner defaults to using the prefab's transform properties for placement.

Create and assign spawn points
4
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/preparing-your-player#test-the-player-spawning)
Test the player spawning
Save the scene and press the **Play** button in the Unity Editor. As soon as the server and client starts you should see the a capsule spawning as the player object at the location of the first spawn point. To see another player spawn you can build and run the game and which will then automatically connect as a client to the editor. You should then see a second player capsule spawn for the second player at the second spawn point.

Built game connected to editor
Alternatively, you can launch a second Unity Editor instance by using [Unity's Multiplayer Play Mode](https://docs-multiplayer.unity3d.com/mppm/current/about/)
package or a third party package such as [ParrelSync](https://github.com/VeriorPies/ParrelSync?tab=readme-ov-file#parrelsync)
. Find out more about these options and how to use them with this tutorial: [Testing with Multiple Editors](https://fish-networking.gitbook.io/docs/tutorials/simple/testing-with-multiple-editors)
.

Multiplayer Play Mode connected to editor
Don't worry if you encounter an error in a second game window stating: **"Server failed to start. This usually occurs when the specified port is unavailable, be it closed or already in use."** This occurs because multiple game instances are attempting to start as a server on the same machine using the same port. Only the first instance will successfully start as a server and the rest will instead start as clients only, thus this error is safe to ignore for local testing.
Download the project files with these completed steps here, or explore the repository:
[Source Files](https://github.com/maxkratt/fish-networking-getting-started/releases/download/preparing-your-player/preparing-your-player.unitypackage)
[Repository](https://github.com/maxkratt/fish-networking-getting-started/tree/preparing-your-player)
[PreviousGetting Connected](https://fish-networking.gitbook.io/docs/tutorials/getting-started/getting-connected)
[NextMoving Your Player Around](https://fish-networking.gitbook.io/docs/tutorials/getting-started/moving-your-player-around)
Last updated 1 month ago
---
# Installing Fish-Networking | Fish-Net: Networking Evolved
If after importing the package you get a message asking to automatically update the API, select either one of the **Yes** options.
###
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/installing-fish-networking#the-unity-asset-store)
The Unity Asset Store
Installing via the Unity Asset Store is the easiest method and ensures you get a stable release:
1. Open your Unity project.
2. Go to **Window > Asset Store** or visit the [Unity Asset Store online](https://assetstore.unity.com/)
.
3. Search for **FishNet**.
4. Click **Add to My Assets** and then **Open in Unity**.
5. In Unity, go to **Package Manager** (`Window > Package Manager`).
6. Select **My Assets**, find **FishNet**, and click **Download** and then **Import**.
Recommended for most users who want a stable release without version control setup.
* * *
###
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/installing-fish-networking#unity-package-file)
Unity package file
Use this method if you have a `.unitypackage` file, for example, downloaded from [GitHub Releases](https://github.com/FirstGearGames/FishNet/releases)
, from the [Fish-Networking website](https://www.fish-networking.com/)
, or shared by a team member.
1. Download the FishNet `.unitypackage` file.
2. In Unity, go to **Assets > Import Package > Custom Package…**
3. Select the downloaded `.unitypackage` file.
4. Click **Import** to bring all the FishNet files into your project.
Best for offline installs or specific package versions not yet on the Asset Store.
* * *
###
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/installing-fish-networking#git-url-via-unity-package-manager)
Git URL (via Unity Package Manager)
This method keeps FishNet up to date via a Git repository. Ideal if you want the latest updates or to contribute to development.
1. Open your Unity project.
2. Go to **Window > Package Manager**.
3. Click the **+** button in the top-left corner.
4. Select **Add package from Git URL…**
5. Enter the following URL:
Copy
https://github.com/FirstGearGames/FishNet.git?path=Assets/FishNet
6. Click **Add** to install.
Ensure you have the [Git client](https://git-scm.com/)
(minimum version 2.14.0) installed on your system and added to the PATH system environment variable.
* * *
###
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/installing-fish-networking#installing-fishnet-pro)
Installing FishNet Pro
Installing FishNet Pro can be done in the same way as the first steps listed above.
If you do need more details though, you can find complete steps for purchasing and installing FishNet Pro at these pages:
[](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support)
**FishNet Pro, Projects, and Support**
Details about what FishNet Pro is, the available paid Projects, and Professional Support.
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro)
**Installing FishNet Pro**
Instructions for how to purchase and install FishNet Pro.
* * *
###
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/installing-fish-networking#fix-for-errors-after-importing)
Fix for errors after importing
If you receive the following errors after importing FishNet, then make sure you don't have Netcode for GameObjects inside your project. The files it uses will clash with FishNet's files and you will need to remove it first and then import FishNet again.
Copy
Assets\FishNet\CodeGenerating\ILCore\ILCoreHelper.cs(18,13): error CS0246: The type or namespace name 'PostProcessorAssemblyResolver' could not be found (are you missing a using directive or an assembly reference?)
Assets\FishNet\CodeGenerating\ILCore\ILCoreHelper.cs(24,50): error CS0246: The type or namespace name 'PostProcessorReflectionImporterProvider' could not be found (are you missing a using directive or an assembly reference?)
[PreviousGetting Started](https://fish-networking.gitbook.io/docs/tutorials/getting-started)
[NextGetting Connected](https://fish-networking.gitbook.io/docs/tutorials/getting-started/getting-connected)
Last updated 1 month ago
---
# Common Tasks | Fish-Net: Networking Evolved
[Starting FishNet's Connections](https://fish-networking.gitbook.io/docs/tutorials/simple/starting-fishnets-connections)
[Making a Custom Player Spawner](https://fish-networking.gitbook.io/docs/tutorials/simple/making-a-custom-player-spawner)
[Building a Dedicated Server](https://fish-networking.gitbook.io/docs/tutorials/simple/building-a-dedicated-server)
[Testing with Multiple Editors](https://fish-networking.gitbook.io/docs/tutorials/simple/testing-with-multiple-editors)
[Simulating Bad Network Connections](https://fish-networking.gitbook.io/docs/tutorials/simple/simulating-bad-network-connections)
[Making a Loading Screen](https://fish-networking.gitbook.io/docs/tutorials/simple/making-a-loading-screen)
[PreviousBeyond the Basics](https://fish-networking.gitbook.io/docs/tutorials/getting-started/commonly-used-guides)
[NextStarting FishNet's Connections](https://fish-networking.gitbook.io/docs/tutorials/simple/starting-fishnets-connections)
Last updated 1 month ago
---
# Using SyncVars to Sync Colors | Fish-Net: Networking Evolved
We've got quite a few things synchronized now, but how would you synchronize a specific variable in one of your scripts? SyncVars are one answer! A [SyncVar](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing/syncvar)
is a FishNet generic type that can be used within [NetworkBehaviours](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides)
that automatically synchronize their value from the server to all clients.
Let's liven up the colors in our game and synchronize them with SyncVars.
1
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/using-syncvars-to-sync-colors#creating-a-script-to-sync-color)
**Creating a script to sync color**
Create a new script called `SyncMaterialColor`. This will be used to synchronize the **Material** color of our **MeshRenderers**.
SyncMaterialColor.cs
Copy
using FishNet.Object;
using FishNet.Object.Synchronizing;
using UnityEngine;
[RequireComponent(typeof(MeshRenderer))]
public class SyncMaterialColor : NetworkBehaviour
{
public readonly SyncVar color = new SyncVar();
void Awake()
{
color.OnChange += OnColorChanged;
}
private void OnColorChanged(Color previous, Color next, bool asServer)
{
GetComponent().material.color = color.Value;
}
}
This simple script has a `color` variable of the type `SyncVar`. It needs be set to `readonly`, but don't worry, we can still get and set its `Value`.
Setting your **SyncVar** as `readonly` will cause it to be hidden from the Unity Inspector. You can read about a work-around for this [here](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing/customizing-behavior)
.
In `Awake` we subscribe to the SyncVar's `OnChange` event. This event is very useful as it will be invoked as soon as the SyncVar changes, even on a client when the server changes it and it's synced.
`OnColorChanged` is our method that we subscribed to the OnChange event. This method simply gets the MeshRenderer and sets its material color to the SyncVar's Color Value, thus updating the visuals to match on all devices.
You may want to read more about **SyncVars** and the other available **SyncTypes** that FishNet has, such as **SyncLists.** You can find those pages [here](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing)
.
2
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/using-syncvars-to-sync-colors#add-the-script-component)
**Add the script component**
Now add your newly created script to your **Cube Prefab**. The script won't currently do anything unless we change the `color` **SyncVar** in it, so let's do that next.

The Sync Material Color component added
3
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/using-syncvars-to-sync-colors#give-the-cubes-random-colors)
**Give the cubes random colors**
Let's give the cubes some color now as soon as we instantiate them.
Reopen the `PlayerCubeCreator.cs` script and make the following addition as show on line 24:
Copy
obj.GetComponent().color.Value = Random.ColorHSV();
Old Input System
New Input System
PlayerCubeCreator.cs
Copy
using FishNet.Object;
using UnityEngine;
public class PlayerCubeCreator : NetworkBehaviour
{
public NetworkObject cubePrefab;
void Update()
{
// Only the local player object should perform these actions.
if (!IsOwner)
return;
if (Input.GetButtonDown("Fire1"))
SpawnCube();
}
// We are using a ServerRpc here because the Server needs to do all network object spawning.
[ServerRpc]
private void SpawnCube()
{
NetworkObject obj = Instantiate(cubePrefab, transform.position, Quaternion.identity);
obj.GetComponent().color.Value = Random.ColorHSV();
Spawn(obj); // NetworkBehaviour shortcut for ServerManager.Spawn(obj);
}
}
PlayerCubeCreator.cs
Copy
using FishNet.Object;
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerCubeCreator : NetworkBehaviour
{
public NetworkObject cubePrefab;
public override void OnStartClient()
{
if (IsOwner)
GetComponent().enabled = true;
}
public void OnFire(InputAction.CallbackContext context)
{
if (context.started)
SpawnCube();
}
// We are using a ServerRpc here because the Server needs to do all network object spawning.
[ServerRpc]
private void SpawnCube()
{
NetworkObject obj = Instantiate(cubePrefab, transform.position, Quaternion.identity);
obj.GetComponent().color.Value = Random.ColorHSV();
Spawn(obj); // NetworkBehaviour shortcut for ServerManager.Spawn(obj);
}
}
This line of code gets the **SyncMaterialColor** component and sets the SyncVar Value to a random color as soon as it's instantiated. Once Spawn is called on the next line, FishNet will spawn this object for all clients with the color SyncVar state synced.
4
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/using-syncvars-to-sync-colors#test-the-synchronized-cubes)
**Test the synchronized cubes**
Now all you need to do is run your game again and see if the cubes spawn with a random color and if that color is synchronized across the network.

Cube color synchronized!
Download the project files with these completed steps here, or explore the repository:
[Source Files](https://github.com/maxkratt/fish-networking-getting-started/releases/download/using-syncvars-to-sync-colors/using-syncvars-to-sync-colors.unitypackage)
[Repository](https://github.com/maxkratt/fish-networking-getting-started/tree/using-syncvars-to-sync-colors)
[PreviousSpawning and Despawning Items](https://fish-networking.gitbook.io/docs/tutorials/getting-started/spawning-and-despawning-items)
[NextSetting Up a Camera](https://fish-networking.gitbook.io/docs/tutorials/getting-started/setting-up-a-camera)
Last updated 1 month ago
---
# Moving Your Player Around | Fish-Net: Networking Evolved
Now that your player object is properly spawned and prepared, it's time to get it moving. In this section, we'll implement a simple client-authoritative movement script and utilize FishNet's [NetworkTransform](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform)
component to effortlessly synchronize that movement across all connected devices.
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/moving-your-player-around#client-authoritative-movement-script)
Client-authoritative movement script
For many games, particularly those with real-time player input, client-authoritative movement is the most straightforward approach. This means the client directly controls its own player object and then informs the server (and other clients) about its position and rotation.
Client-authoritative movement makes it easier for the client to cheat with speed hacks, teleportation, and other movement related hacks, but it is a lot easier to implement and understand.
1
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/moving-your-player-around#creating-a-player-movement-script)
**Creating a player movement script**
Select your **Player** prefab in the Project window. In the Inspector, click on **Add Component** and search for **New Script**. Name the script `PlayerMovement` and click **Create and Add**.

Creating the PlayerMovement script
2
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/moving-your-player-around#editing-the-script)
**Editing the script**
Double-click the `PlayerMovement` script to open it in your code editor. Replace the default code with the following:
Old Input System
New Input System
Unlike typical single-player scripts that use `MonoBehaviour`, this script inherits from `NetworkBehaviour`. This allows for direct access to the `IsOwner` field. Although you could still check ownership via the [NetworkObject](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-object)
component on a **MonoBehaviour**, [NetworkBehaviour](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides)
provides significant advantages. It enables [RPCs](https://fish-networking.gitbook.io/docs/guides/features/network-communication/remote-procedure-calls)
, [SyncVars](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing)
, and [specialized override methods](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#callbacks)
(akin to Unity's `Start`, `Awake`, and `OnDestroy` but for networked objects).
PlayerMovement.cs
Copy
using FishNet.Object;
using UnityEngine;
// Inherit from NetworkBehaviour instead of MonoBehaviour
public class PlayerMovement : NetworkBehaviour
{
public float moveSpeed = 5f;
void Update()
{
// Only run this code on the object the local client owns.
// This prevents us from moving other players' objects.
if (!IsOwner)
return;
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
Vector3 moveDirection = new Vector3(horizontal, 0f, vertical);
if (moveDirection.magnitude > 1f)
moveDirection.Normalize();
transform.position += moveSpeed * Time.deltaTime * moveDirection;
}
}
Since there will be multiple player game objects in the game, we need to determine which one is "our" local player's one and only move that with our input. The `IsOwner` guard clause handles this.
If using [Unity's New Input System](https://learn.unity.com/tutorial/setting-up-the-input-system-u6?uv=6)
, you should add the **Player Input** component to your **Player Prefab** and be sure to **disable** it

The PlayerInput component added to the Player Prefab and Disabled
Unlike typical single-player scripts that use `MonoBehaviour`, this script inherits from `NetworkBehaviour`. This allows for direct access to the `IsOwner` field. Although you could still check ownership via the [NetworkObject](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-object)
component on a **MonoBehaviour**, [NetworkBehaviour](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides)
provides significant advantages. It enables [RPCs](https://fish-networking.gitbook.io/docs/guides/features/network-communication/remote-procedure-calls)
, [SyncVars](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing)
, and [specialized override methods](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#callbacks)
(akin to Unity's `Start`, `Awake`, and `OnDestroy` but for networked objects).
PlayerMovement.cs
Copy
using FishNet.Object;
using UnityEngine;
using UnityEngine.InputSystem;
// Inherit from NetworkBehaviour instead of MonoBehaviour
public class PlayerMovement : NetworkBehaviour
{
public float moveSpeed = 5f;
private Vector2 currentMovementInput;
public override void OnStartClient()
{
if (IsOwner)
GetComponent().enabled = true;
}
public void OnMove(InputValue value)
{
currentMovementInput = value.Get();
}
void Update()
{
// Only run this code on the object the local client owns.
// This prevents us from moving other players' objects.
if (!IsOwner)
return;
Vector3 moveDirection = new Vector3(currentMovementInput.x, 0f, currentMovementInput.y);
if (moveDirection.magnitude > 1f)
moveDirection.Normalize();
transform.position += moveSpeed * Time.deltaTime * moveDirection;
}
}
Since there will be multiple player game objects in the game, we need to determine which one is "our" local player's one and only move that with our input. The `IsOwner` guard clause in `Update` handles this. We are also using the NetworkBehaviour `OnStartClient` callback to enable the **PlayerInput** component when `IsOwner` is true. This method runs when the network object is initialized on the network and only on the client side. It's similar to Unity's `Start` callback and is used here to only send the input to our local player object.
3
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/moving-your-player-around#synchronizing-the-movement)
**Synchronizing the movement**
Now we have code that will allow clients to move only their respective player object, but nothing is yet synchronized over the network This means that we won't ever see other players moving, and they won't see us moving.
To fix this, we will use Fish-Networking's built-in [NetworkTransform](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform)
component. This component can be used to synchronize a network object's scale, rotation, position, and parent hierarchy.
Open your **Player Prefab** and add the **NetworkTransform** component to it.

The default settings of the **NetworkTransform.**
This component has quite a few settings, but the most important ones for us right now are the **Client Authoritative** and the **Synchronize Position** fields. Both of these should be enabled, which will mean positional changes made by the owner client will automatically be synchronized to the server and then to all other clients.
4
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/moving-your-player-around#testing-the-player-movement)
**Testing the player movement**
Save your scene and press the **Play** button in Unity's Editor. Your player capsule should now be visible. Use the **W, A, S, D** keys or arrow keys to move your player around the scene.
To test multi-player movement, you can build and run the game, which will automatically connect as a client to the editor. You should then be able to control your player in the editor, and the second instance will control its own player, seeing both players move independently.

Download the project files with these completed steps here, or explore the repository:
[Source Files](https://github.com/maxkratt/fish-networking-getting-started/releases/download/moving-your-player-around/moving-your-player-around.unitypackage)
[Repository](https://github.com/maxkratt/fish-networking-getting-started/tree/moving-your-player-around)
[PreviousPreparing Your Player](https://fish-networking.gitbook.io/docs/tutorials/getting-started/preparing-your-player)
[NextSpawning and Despawning Items](https://fish-networking.gitbook.io/docs/tutorials/getting-started/spawning-and-despawning-items)
Last updated 1 month ago
---
# Using the Scene Camera | Fish-Net: Networking Evolved
With this method our local player will take control of the Main Camera it finds in the scene.
1
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/setting-up-a-camera/using-the-scene-camera#the-main-camera-tag)
**The main camera tag**
Before we start we need to ensure our camera object in the scene is tagged as the "Main Camera"

Main Camera in scene with the tag
2
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/setting-up-a-camera/using-the-scene-camera#giving-the-player-a-camera-holder)
**Giving the player a camera holder**
Now create an empty Game Object on your **Player Prefab** and position it where you'd like. This will be where we parent and position the **Camera** object.

Camera Holder created on the Player Prefab
3
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/setting-up-a-camera/using-the-scene-camera#writing-a-playercamera-script)
**Writing a PlayerCamera script**
Let's now add the following script to the **Player Prefab** that we will use to take control of our **Camera** once our player spawns in.
PlayerCamera.cs
Copy
using FishNet.Connection;
using FishNet.Object;
using UnityEngine;
// This script will be a NetworkBehaviour so that we can use the
// OnOwnershipClient override.
public class PlayerCamera : NetworkBehaviour
{
[SerializeField] private Transform cameraHolder;
// This method is called on the client after gaining or losing ownership of the object.
// We could have used OnStartClient instead, as we did in the previous example, but using OnOwnershipClient
// means this will work for a player object we don't initially own but are given ownership to later.
public override void OnOwnershipClient(NetworkConnection prevOwner)
{
if (Camera.main == null)
return;
// If we are the new owner of this object, then take control of the camera by parenting it
// and moving it to our camera holder.
if (IsOwner)
{
Camera.main.transform.SetPositionAndRotation(cameraHolder.position, cameraHolder.rotation);
Camera.main.transform.SetParent(cameraHolder);
}
}
}
This script uses the [OnOwnershipClient](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#onownershipclient)
override method from [NetworkBehaviour](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides)
to instantiate the camera prefab for our local player as soon as he gets ownership of the object. We could just have easily used the [OnStartClient](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#onstartclient)
override method like the [Instantiating a Local Camera](https://fish-networking.gitbook.io/docs/tutorials/getting-started/setting-up-a-camera/instantiating-a-local-camera)
example shows.
4
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/setting-up-a-camera/using-the-scene-camera#assign-your-references-to-the-script)
**Assign your references to the script**
Now select the **Player Camera** component in your **Player Prefab** and add the **Camera Prefab** we made to the _Camera Prefab_ field. Also select the **CameraHolder** game object in the _Camera Holder_ field.

The Player prefab with the **Camera Holder** filled in
5
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/setting-up-a-camera/using-the-scene-camera#test-the-camera-in-game)
**Test the camera in-game**
With all that set you should be able to run the game and see how the camera from the scene is controlled by only your local player.

Demonstration of the local camera
Download the project files with these completed steps here, or explore the repository:
[Source Files](https://github.com/maxkratt/fish-networking-getting-started/releases/download/using-the-scene-camera/using-the-scene-camera.unitypackage)
[Repository](https://github.com/maxkratt/fish-networking-getting-started/tree/using-the-scene-camera)
[PreviousInstantiating a Local Camera](https://fish-networking.gitbook.io/docs/tutorials/getting-started/setting-up-a-camera/instantiating-a-local-camera)
[NextBasic Setup with Cinemachine](https://fish-networking.gitbook.io/docs/tutorials/getting-started/setting-up-a-camera/basic-setup-with-cinemachine)
Last updated 1 month ago
---
# Connecting to Remote Devices | Fish-Net: Networking Evolved
Once you have a basic networked game set up and can connect as a host, the next crucial step for true multiplayer is enabling clients to connect to a server running on a different machine. This guide will walk you through the process of connecting to remote devices.
1
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/connecting-to-remote-devices#identifying-the-servers-ip-address)
**Identifying the server's IP address**
For a client to connect to a remote server, it needs to know the server's IP address.
* **Local Network (LAN):** If the server and client are on the same local network (e.g., two computers in the same house), you'll need the server machine's local IP address (e.g., `192.168.1.100`). You can usually find this through your operating system's network settings.
* **Public Network (Internet):** If clients are connecting over the internet, you'll need the server's public IP address. This is often the IP address of the router that the server machine is connected to. You might need to set up **port forwarding** on the server's router to allow incoming connections to the game server's port.
For testing on a local network, you can often find your machine's IP address by opening a command prompt (Windows) and typing `ipconfig`, or a terminal (macOS/Linux) and typing `ifconfig` or `ip a`. Look for the IPv4 address associated with your active network adapter.
2
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/connecting-to-remote-devices#configuring-the-client-to-connect)
**Configuring the client to connect**
To connect as a client to a remote server, you'll need to manually set the server's address.
1. **Locate the NetworkManager:** In your Unity scene, select the **NetworkManager** game object.
2. **Select or add the Transport Component:** In the Inspector, locate the [Transport](https://fish-networking.gitbook.io/docs/guides/high-level-overview/transports)
component (e.g., [Tugboat](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat)
if you're using the default). If there is none, add Tugboat now.
3. **Set the Address:** Find the `Client Address` field within the Transport component. Enter the IP address of your remote server here. For example, if your server's local IP is `192.168.1.100`, you would enter that.
4. **Set the Port (if different):** The default port for FishNet is `7777`. If your server is configured to use a different port, update the `Port` field accordingly.
The `NetworkHudCanvas` is a convenient debugging tool. In a finished game, you would typically create your own UI for players to enter an IP address and connect.

3
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/connecting-to-remote-devices#building-and-testing-the-connection)
**Building and testing the connection**
To test connecting to a remote device, you'll need to build your game.
1. **Build the Client:** Go to `File > Build Settings...`. Ensure your scene is added to "Scenes In Build". Select your target platform (e.g., Windows, macOS, Android). Click `Build` and choose a location to save your executable.
2. **Start the Server:** Launch one instance of your game (either from the Unity Editor, a regular build or a dedicated server build) on the machine that will act as the server. If it's a dedicated server build then the FishNet server will start automatically, otherwise you will need to make sure you start it with the NetworkHudCanvas Server button, Autostart option, or through your own code.
3. **Launch the Client:** On a _separate_ machine, launch the client build you just created.
4. **Connect:** If you disabled auto-start, click the "Start Client" button from the NetworkHudCanvas in the client build.
If configured correctly, the client should connect to the server, and you should see network-related messages in both the server and client consoles indicating a successful connection. You should also see players spawning as configured in the [Preparing Your Player](https://fish-networking.gitbook.io/docs/tutorials/getting-started/preparing-your-player)
guide.
4
####
[](https://fish-networking.gitbook.io/docs/tutorials/getting-started/connecting-to-remote-devices#troubleshooting-common-connection-issues)
**Troubleshooting common connection issues**
If your client fails to connect, consider these common issues:
* **Incorrect IP Address:** Double-check that the IP address entered in the Transport component is correct for the server machine. Also make sure you entered it in the "Client Address" field and not one of the "Server Bind Address" fields.
* **Firewall:** Ensure that the firewall on the server machine is not blocking incoming connections on the game's port (default 7777). You may need to create an inbound rule to allow traffic.
* **Port Forwarding (for Internet connections):** If connecting over the internet, the server's router needs to be configured to forward the game's port (e.g., 7777) to the server machine's local IP address. Without this, external clients cannot reach your server.
* **Server Not Running:** Verify that the server instance of your game is actually running and has successfully started its network services.
* **Different Game Versions:** Ensure both the server and client are running the exact same version of your game build. Mismatched versions can cause connection failures.
* **Network Congestion/Latency:** On public networks, high latency or packet loss can sometimes lead to connection timeouts.
By carefully checking these points, you can resolve most connection issues and get your remote clients connected.
If you are trying to test over the Internet, it may be easier and safer to use an application to create a virtual LAN instead of portforwarding your router.
[PreviousBasic Setup with Cinemachine](https://fish-networking.gitbook.io/docs/tutorials/getting-started/setting-up-a-camera/basic-setup-with-cinemachine)
[NextBeyond the Basics](https://fish-networking.gitbook.io/docs/tutorials/getting-started/commonly-used-guides)
Last updated 1 month ago
---
# Terminology | Fish-Net: Networking Evolved
[Server, Client, Host](https://fish-networking.gitbook.io/docs/guides/high-level-overview/terminology/server-client-host)
[Communicating](https://fish-networking.gitbook.io/docs/guides/high-level-overview/terminology/communicating)
[Miscellaneous](https://fish-networking.gitbook.io/docs/guides/high-level-overview/terminology/miscellaneous)
[PreviousNetworking Models](https://fish-networking.gitbook.io/docs/guides/high-level-overview/networking-models)
[NextServer, Client, Host](https://fish-networking.gitbook.io/docs/guides/high-level-overview/terminology/server-client-host)
Last updated 6 months ago
---
# Networking Models | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/guides/high-level-overview/networking-models#client-server-architecture)
Client-Server architecture
---------------------------------------------------------------------------------------------------------------------------------------------------
The **client-server model** is the most widely used approach in multiplayer networking. In this model:
* **Server**: The authoritative instance of the game. It manages game logic, synchronizes game state, validates player actions, and handles communication between clients.
* **Client**: A player's instance of the game. It sends input to the server and receives updates about the game state.
There are two main types of servers:
###
[](https://fish-networking.gitbook.io/docs/guides/high-level-overview/networking-models#dedicated-server)
**Dedicated server**
The server runs as its own process, separate from any player. It’s more secure and scalable, commonly used in competitive or large-scale games.

A dedicated server model
As you can see from the above diagram, the clients (players) are all connected directly to the server and communicate with it instead of with each other.
* * *
###
[](https://fish-networking.gitbook.io/docs/guides/high-level-overview/networking-models#host-listen-server)
**Host (listen-server)**
The server and one of the clients run in the same process. This is common in smaller games or development environments.

A listen-server model
The above diagram demonstrates how the listen server is similar to the dedicated server model where all clients connect directly with the server, but unlike the dedicated server, the listen server is also acting as a client (player).
FishNet supports both dedicated and host server models out of the box.
* * *
[](https://fish-networking.gitbook.io/docs/guides/high-level-overview/networking-models#peer-to-peer-p2p)
Peer-to-peer (P2P)
---------------------------------------------------------------------------------------------------------------------------------
In **peer-to-peer networking**, each player (or peer) connects directly to others without a central server. This reduces latency and server costs but comes with challenges:
* Poor security and cheating prevention
* Difficult to synchronize game state reliably
* NAT traversal issues

A peer-to-peer model
P2P is rarely used in modern real-time multiplayer games, especially competitive ones, due to these drawbacks. FishNet does not use P2P, as it is designed around the client-server model for reliability and security.
Very often a listen server setup is referred to as P2P, FishNet does support a listen server.
* * *
[](https://fish-networking.gitbook.io/docs/guides/high-level-overview/networking-models#relay-servers)
Relay servers
-------------------------------------------------------------------------------------------------------------------------
Sometimes clients are unable to connect directly to the server due to **NAT (Network Address Translation)** or **firewall** restrictions. A **relay server** acts as a middleman to forward traffic between clients and the server.

A relay server
Relay servers:
* Allow connectivity when direct connections fail
* Introduce additional latency
* May be used as a fallback or for web-based games
Fish-Networking supports multiple third-party relay services including [Unity's Relay](https://unity.com/products/relay)
, [Edgegap's Distributed Relay](https://edgegap.com/platform/distributed-relay)
, [Photon Realtime](https://www.photonengine.com/Realtime)
, [Epic Online Services' Relay Service](https://dev.epicgames.com/docs/epic-online-services/eos-overview#peer-to-peer-p2p-connections)
, and [Steam Datagram Relay](https://partner.steamgames.com/doc/features/multiplayer/steamdatagramrelay)
.
* * *
###
[](https://fish-networking.gitbook.io/docs/guides/high-level-overview/networking-models#host-migration)
Host migration
When using a listen server, the host leaving the game would cause all players to leave the game; **Host migration** is a feature for maintaining game sessions in the event the current host disconnects or experiences network issues. It enables a new host to be elected from the remaining connected players, minimizing disruption and ensuring the game session can continue seamlessly.
Fish-Networking doesn't yet have built-in host migration, but it is a feature that may be added in the future.
[PreviousFundamentals](https://fish-networking.gitbook.io/docs/guides/high-level-overview/fundamentals)
[NextTerminology](https://fish-networking.gitbook.io/docs/guides/high-level-overview/terminology)
Last updated 1 month ago
---
# Making a Custom Player Spawner | Fish-Net: Networking Evolved
In many games, you'll often need to spawn a **GameObject** to represent a player. This can happen at various points during gameplay—such as when a player first connects, once a specific number of players have joined, after a particular scene finishes loading, or when the host initiates it with a button press.
FishNet includes a default [PlayerSpawner](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/playerspawner)
component designed primarily as a quick-start tool and reference example. It automatically spawns a player object for each client upon successful connection and authentication. It also has the option to define specific player spawn points, and if multiple spawn points are provided, the component will rotate through them sequentially.
If this functionality is sufficient for your game, then you can go ahead and use the default one, if not, let's look at how to implement our own to handle different use cases.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/playerspawner)
**Spawning Players When Connected**
The default PlayerSpawner handles this for you. So there's nothing more to do besides adding it to your game and assigning a prefab to it.
Difficulty
[](https://fish-networking.gitbook.io/docs/tutorials/simple/making-a-custom-player-spawner/manually)
**Spawning Players Manually**
Tutorial for creating a script to manually spawn your players when you call a method.
Difficulty
[](https://fish-networking.gitbook.io/docs/tutorials/simple/making-a-custom-player-spawner/spawning-selected-player)
**Spawning a Selected Player**
Tutorial for allowing your players to choose a character object before spawning it.
Difficulty
[](https://fish-networking.gitbook.io/docs/tutorials/simple/making-a-custom-player-spawner/set-player-number)
**Spawning Players When Set Number of Players Joined**
Tutorial for spawning players as soon as a set number of clients have joined your game.
Difficulty
[](https://fish-networking.gitbook.io/docs/tutorials/simple/making-a-custom-player-spawner/on-scene-load)
**Spawning Players on Scene Load**
Tutorial for spawning players as soon as they are loaded by FishNet into a specific scene.
Difficulty
[PreviousStarting FishNet's Connections](https://fish-networking.gitbook.io/docs/tutorials/simple/starting-fishnets-connections)
[NextSpawning Players Manually](https://fish-networking.gitbook.io/docs/tutorials/simple/making-a-custom-player-spawner/manually)
Last updated 1 month ago
---
# Simulating Bad Network Connections | Fish-Net: Networking Evolved

When developing a multiplayer game, it’s not enough to test only under perfect network conditions. Real-world players will often experience **latency**, **jitter**, **out of order packets,** and **packet loss**, and your game needs to tolerate these. If you only test on your local machine with a flawless connection, you risk shipping a game that breaks down as soon as it’s played online.
* * *
[](https://fish-networking.gitbook.io/docs/tutorials/simple/simulating-bad-network-connections#what-conditions-affect-networked-games)
What conditions affect networked games?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
* **Latency (Ping)** — delays between sending and receiving packets.
* **Jitter** — variations in latency over time (unstable ping).
* **Out-of-order Packets** — packets may arrive out of the order from when they were sent.
* **Packet Loss** — some messages never arrive.
Testing with these factors early helps you tune interpolation, reconciliation, lag-compensation, and other systems. It also reveals edge cases that only show up at higher latencies (e.g., 500ms+).
* * *
[](https://fish-networking.gitbook.io/docs/tutorials/simple/simulating-bad-network-connections#what-values-should-i-test-with)
What values should I test with?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
There’s no one-size-fits-all answer, but some general guidelines:
* **Desktop broadband**: 100–150ms latency, 1–3% packet loss
* **Mobile networks**: 100–300ms latency, 2–5% packet loss, plus jitter
* **Stress testing**: also check 500ms, 1000ms+, and extreme packet loss to ensure your game fails gracefully
Remember: don’t test with just “added delay.” Real networks get affected by multiple factors.
* * *
[](https://fish-networking.gitbook.io/docs/tutorials/simple/simulating-bad-network-connections#fishnets-built-in-simulator)
FishNet’s built-in simulator
-------------------------------------------------------------------------------------------------------------------------------------------------------------
FishNet includes a basic latency simulator that can add artificial latency, packet loss, and tamper with packet order. These can also affect the client host player.
To use this, add the [TransportManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager)
component to your network manager. You will now be able to enable the **Latency Simulator** and tweak its settings.

The **Latency Simulator** on the **TransportManager**
* * *
[](https://fish-networking.gitbook.io/docs/tutorials/simple/simulating-bad-network-connections#external-tools)
External tools
----------------------------------------------------------------------------------------------------------------------------------
For more options it's recommended to use an external tool, such as one of the ones listed below:
* **Windows**: [Clumsy](https://jagt.github.io/clumsy/)
* **macOS/iOS**: [Network Link Conditioner](mailto:undefined)
(in Apple’s Additional Tools for Xcode)
* **macOS (advanced)**: [dummynet](https://manpagez.com/man/8/dnctl/)
, dnctl and pfctl (built into macOS)
* **Linux:** [netem](https://wiki.linuxfoundation.org/networking/netem)
These tools let you add latency, packet loss, bandwidth limits, and more. They operate at the system level, so every application (including your game) experiences the degraded connection.
[PreviousTesting with Multiple Editors](https://fish-networking.gitbook.io/docs/tutorials/simple/testing-with-multiple-editors)
[NextMaking a Loading Screen](https://fish-networking.gitbook.io/docs/tutorials/simple/making-a-loading-screen)
Last updated 1 month ago
---
# High-Level Overview | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/guides/high-level-overview/fundamentals)

**Fundamentals**
Learn the core concepts and basic principles of our system.
[](https://fish-networking.gitbook.io/docs/guides/high-level-overview/networking-models)

**Networking Models**
Dive deep into the various networking architectures and designs.
[](https://fish-networking.gitbook.io/docs/guides/high-level-overview/terminology)

**Terminology**
Understand the key terms and definitions used across our documentation.
[](https://fish-networking.gitbook.io/docs/guides/high-level-overview/transports)

**Transports**
Discover the different methods and protocols for data transfer.
[PreviousMaking a Loading Screen](https://fish-networking.gitbook.io/docs/tutorials/simple/making-a-loading-screen)
[NextFundamentals](https://fish-networking.gitbook.io/docs/guides/high-level-overview/fundamentals)
Last updated 5 months ago
---
# Updating FishNet | Fish-Net: Networking Evolved
Before making large changes to your project, it's always advised to back it up by using your version control software or a manual backup. We advise doing this step first before trying to update your FishNet version, even if the likelihood of it breaking anything is quite small.
If you have a project using the free version of FishNet and want to update it to FishNet Pro, you can follow these exact same steps.
###
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet#steps)
Steps
1. Make a project backup/commit.
2. Uninstall FishNet. You can do this from the Package Manager or by deleting the FishNet folder in the Unity Editor.
3. Don't close Unity
4. Import the FishNet Pro version from one of the methods listed above.
Your project should now be correctly updated to the latest version, if you run into any issues along the way, please feel free to reach out for help in our discord server: [https://discord.gg/Ta9HgDh4Hj](https://discord.gg/Ta9HgDh4Hj)
[PreviousCode Stripping (Pro Feature)](https://fish-networking.gitbook.io/docs/guides/features/code-stripping)
[NextChanges in API](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-api)
Last updated 1 month ago
---
# Troubleshooting | Fish-Net: Networking Evolved
[Technical Limitations](https://fish-networking.gitbook.io/docs/guides/troubleshooting/technical-limitations)
[Creating Bug Reports](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports)
[FAQ](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq)
[PreviousMoving to Fish-Networking](https://fish-networking.gitbook.io/docs/guides/upgrading-to-fish-net)
[NextTechnical Limitations](https://fish-networking.gitbook.io/docs/guides/troubleshooting/technical-limitations)
Last updated 12 days ago
---
# Server Hosting | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/guides/server-hosting#what-does-server-hosting-entail)
What does server hosting entail?
---------------------------------------------------------------------------------------------------------------------------------------
Server hosting involves renting or utilizing a server to host your game's files and services. A server host is essential for game deployment because it provides the infrastructure and resources necessary to manage server loads, enable online gameplay, and ensure the game is accessible to players around the world. It also facilitates updates, balances traffic, and maintains security, which are crucial for a smooth gaming experience.
FishNet supports any server hosting you choose, and you can also manage it completely yourself, including letting your players host servers themselves or act as a host.
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/terminology)
**Terminology**
Overview of key server hosting terms, comparing session-based vs persistent architectures, and outlining the roles of relays and dedicated servers.
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services)
**Services**
A comparison of third-party hosting and relay services compatible with FishNet, including our recommended providers.
[PreviousUpgrading to FishNet Pro](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro)
[NextTerminology](https://fish-networking.gitbook.io/docs/guides/server-hosting/terminology)
Last updated 1 month ago
---
# Terminology | Fish-Net: Networking Evolved
###
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/terminology#session-based-versus-persistent)
Session-based versus persistent
A session-based service, be it relay or dedicated server, will start up and end as needed. Given that these servers are on-demand(session-based) you typically pay-per-use rather than a flat rate, which can save you a substantial amount of money. Session-based services are the most common way online games are hosted and are typically used for matches and lobby based gaming, but can also be used for entire worlds with hundreds of players.
Persistent services are typically always running, no matter the number of players present. Because the servers are always available, this makes it easier to maintain the state of your worlds. A persistent server is the common choice for MMO-like games. While a constant world is very appealing this type of service often comes with significantly higher costs.
###
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/terminology#dedicated-servers)
Dedicated servers
A dedicated server refs to a server-authoritative game server. There are several advantages to a dedicated server, and very few cons.
**Benefits of a dedicated server:**
* **Scalability**: dedicated servers are rarely limited to a set number of players. If you need worlds which support dozens — even hundreds — of players, generally a dedicated server is the recommended route.
* **Security**: a dedicated server is the only way to effectively prevent player cheating, as the server becomes your game's authority and allows you to validate player information.
* **Bandwidth**: data transfer is rarely limited with dedicated servers. Relays may limit how much total data you can send, or throttle how frequently you can send data.
* **Latency:** for games which require a fast response time a dedicated server is mandatory. These servers can deploy across the world, providing the best latency and most neutrality for players.
* **Persistence**: if you want players to be able to join and leave servers, whether the service is session-based or persistent, a dedicated server will provide a smoother experience. Unlike peer-to-peer hosting, no player-host is required.
**Drawbacks of a dedicated server:**
* **Cost:** dedicated servers can be more expensive, especially if a free relay service is available through your platform or other means.
###
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/terminology#relays)
Relays
A relay is a client-authoritative service, where the client acts as the server.
**Benefits of a relay:**
* **Cost-effective for Casual Games: Relays are Ide**al for casual or small-scale games, especially when a free relay service is available. However, using a paid relay service can quickly become impractical, as pay-per-use dedicated servers are often more affordable, while also gaining other advantages.
**Drawbacks of a relay:**
* **Scalability**: relays cannot scale. You are often limited to a number of players per session.
* **Security**: the client acting as the host is the authoritative source. Because there is not a neutral authority, cheating is very possible and often easily performed on relay servers. If cheating is a concern, a relay is likely not for you.
* **Bandwidth**: while total bandwidth usage is rarely restricted, most relay services impose limitations on data transfer frequency or size. Games that require rapid data transmission or large data chunks may experience throttling, leading to various performance issues.
* **Latency**: the hosting client's network connection determines latency for the entire session. A weak connection results in higher latency for all players, and players located far from the host will experience additional delay.
* **Persistence**: relay services do not support state persistence. When the host ends the session, all progress is lost. Additionally, if the host leaves unexpectedly, the game session typically terminates immediately for all connected players.
[PreviousServer Hosting](https://fish-networking.gitbook.io/docs/guides/server-hosting)
[NextServices](https://fish-networking.gitbook.io/docs/guides/server-hosting/services)
Last updated 1 month ago
---
# Technical Limitations | Fish-Net: Networking Evolved
Limitation is not a word we like to use in Fish-Networking but unfortunately there are a few technical blocks with Unity, or restrictions in place for performance reasons. These limitations are considered reasonably acceptable and may never be resolved.
Networked scene objects[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/technical-limitations#networked-scene-objects)
When a scene object is networked they may behave differently.
A networked scene object will be disabled when a scene loads, and will not activate until the client or server is started. For clients specifically networked scene objects will only activate when the server is sure the client has loaded the scene; this is done automatically through the Fish-Networking scene manager.
Our [SceneManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/scenemanager)
allows instantiated networked objects to be moved between scenes, but networked scene objects may not. Unity cannot know a scene objects details without the scene being loaded first, so trying to spawn a scene object without the client having the scene loaded would result in errors.
Due to the movement restrictions just mentioned, networked scene objects may not be marked DontDestroyOnLoad, nor can the [NetworkObject.IsGlobal](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/networkobjects#global-networkobject)
feature be used. Both of these would place the scene object in a new scene, causing errors.
When a networked scene object is despawned it is always disabled, rather than destroyed. This is so you may spawn it at a later time. Manually destroying a scene object on the server is possible and would simply result in it never being spawned on clients.
Nested NetworkObjects and NetworkBehaviours[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/technical-limitations#nested-networkobjects-and-networkbehaviours)
NetworkObjects which are nested on a prefab may not be unparented at runtime.
Root NetworkObjects may have their parent updated at runtime.
PredictedSpawn[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/technical-limitations#predictedspawn)
Predicted spawns currently cannot be spawned as nested.
Predicted spawns are currently not aligned with prediction interpolation.
[PreviousTroubleshooting](https://fish-networking.gitbook.io/docs/guides/troubleshooting)
[NextCreating Bug Reports](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports)
Last updated 1 month ago
---
# Upgrading to FishNet Pro | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro#purchasing-fishnet-pro)
Purchasing FishNet Pro
-----------------------------------------------------------------------------------------------------------------------------------------------
Fish-Networking Pro can be gotten by purchasing it from the Unity Asset Store or from sponsoring the project on GitHub or Patreon.
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro#the-unity-asset-store)

**Unity Asset Store**
Purchase directly on the Unity Asset store to get lifetime access to future updates and be able to import it through Unity's Package Manager.
Package Manager
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro#github-sponsors)

GitHub Sponsors
Sponsor FishNet on GitHub to get access to FishNet Pro on a monthly or lifetime basis. This option also gives the most back to the developers.
Best Deal
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro#patreon)

Patreon
Get access to FishNet Pro on a monthly or lifetime basis by sponsoring the developer on Patreon.
Alternative
* * *
###
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro#unity-asset-store)
Unity Asset Store
Purchasing and installing via the Unity Asset Store should be very familiar to a regular Unity user. With this method you will have lifetime access to FishNet and be able to download the latest version available on the Asset Store through the Unity Package Manager.
1. Open your Unity project.
2. Go to **Window > Asset Store** or visit the [Unity Asset Store online](https://assetstore.unity.com/)
.
3. Search for **FishNet Pro** or navigate to this link: [https://assetstore.unity.com/packages/tools/network/fishnet-pro-networking-evolved-287711](https://assetstore.unity.com/packages/tools/network/fishnet-pro-networking-evolved-287711)
4. Click **Buy Now**, proceed with the payment, and then click **Open in Unity**.
5. In Unity, go to **Package Manager** (`Window > Package Manager`).
6. Select **My Assets**, find **FishNet Pro**, and click **Download** and then **Import**.
You can also gain access to Priority Support with your asset store purchase! Your priority support months begin only after you claim your perks on our Discord; see [After Purchasing](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#after-purchasing)
please.
The amount of months received are directly related to what goes back into the project after Unity's fees. If you purchase Fish-Networking Pro at $50 you will receive 4 months of Priority Support, and 2 months at $25.
* * *
###
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro#github-sponsors)
GitHub Sponsors
Through GitHub Sponsors you can get lifetime or monthly access to FishNet at various prices. When obtaining Fish-Networking Pro through GitHub you will have access to both Pro and the paid Projects.
1. Head over to the [FirstGearGames GitHub Sponsors](https://github.com/sponsors/FirstGearGames)
page.
2. Select one of the monthly or one-time options and then proceed to the payment.
3. You can now go to the [Fish-Networking website](https://www.fish-networking.com/#downloads)
.
4. Login with the **GitHub Login** option and then download the FishNet `.unitypackage` file.
5. In Unity, go to **Assets > Import Package > Custom Package…**
6. Select the downloaded `.unitypackage` file.
7. Click **Import** to bring all the FishNet files into your project.
You **must** make a one-time payment of at least $10 for your initial downloads. Afterwards you're welcome to switch to $2/month for updates. You may leave the updates tier and join us again at any time.
When on any $10 tier or higher you will gain access to Priority Support, this includes your initial purchase; see [support tier options](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#support-tier-options)
for more information on this.
Find out more perks of using this method [here](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#github-and-patreon-perks)
.
* * *
###
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro#patreon)
Patreon
When obtaining Fish-Networking Pro through Patreon you will have access to both Pro and the paid Projects. You **must** make a one-time payment of $10 for your initial downloads. Afterwards you're welcome to switch to $2/month for updates. You may leave the updates tier and join us again at any time.
1. Head over to the [FirstGearGames Patreon](mailto:undefined)
page.
2. Select a membership tier and then proceed to the payment.
3. You can now go to the [Fish-Networking website](https://www.fish-networking.com/#downloads)
.
4. Login with the **Patreon Login** option and then download the FishNet `.unitypackage` file.
5. In Unity, go to **Assets > Import Package > Custom Package…**
6. Select the downloaded `.unitypackage` file.
7. Click **Import** to bring all the FishNet files into your project.
You **must** make a one-time payment of at least $10 for your initial downloads. Afterwards you're welcome to switch to $2/month for updates. You may leave the updates tier and join us again at any time.
When on any $10 tier or higher you will gain access to Priority Support, this includes your initial purchase; see [support tier options](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#support-tier-options)
for more information on this.
Find out more perks of using this method [here](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#github-and-patreon-perks)
.
[PreviousChanges in API](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-api)
[NextServer Hosting](https://fish-networking.gitbook.io/docs/guides/server-hosting)
Last updated 1 month ago
---
# Creating Bug Reports | Fish-Net: Networking Evolved
New bug reports can be created by navigating [here](https://github.com/FirstGearGames/FishNet/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=)
. You will need to be logged into GitHub to create a bug report.
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports#keep-an-eye-on-your-reports)
Keep an eye on your reports
----------------------------------------------------------------------------------------------------------------------------------------------------
If your bug report is missing information we may close it out asking you to submit a new report.
Sometimes bug reports perfectly meet our guidelines but require more information. When this happens we will notify you in the bug report of what information we need, and place a 'waiting on information' flag on the bug report.
If we do request more information and receive no response within 2 weeks the report will likely be closed to keep prioritization and order. You can still comment on closed reports; we will re-open them as needed.
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports#issue-template)
Issue template
--------------------------------------------------------------------------------------------------------------------------
When creating a new issue on our GitHub you will be presented with a template. Provided below is detail information on how to complete the template.
###
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports#necessary-information)
Necessary information
When filling out your report please include the following:
* Unity version.
* Fish-Networking version.
* Discord link where you troubleshot the issue.
If you are not able to join our Discord to troubleshoot please specify this in place of where you would include the Discord link. We still expect you to troubleshoot the issue locally if you are unable to connect with our helpers.
Leaving your Discord name in our server, or email address(less preferred) will allow us to contact you if you're unresponsive to the bug report while we still need more information.
###
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports#description)
Description
Provide a brief description of the bug report. This should be a summary of what causes the bug or how the bug is affecting your project.
###
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports#replication)
Replication
In an ordered fashion please provide step-by-step details on how to reproduce the bug. Be sure to indicate if starting as client, server, if multiple builds must be running, what actions to take, and so on.
###
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports#expected-behavior)
Expected behavior
Describe what you expect the behavior to be. This helps us know if the result is intended, as well could give us insight on what may be going wrong.
###
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports#media)
Media
If there is any media or content which could assist us in resolving your issue please provide it here. Media could be a variety of things such as images, stack traces, videos, links and more. If you are providing code samples or stacktraces please use text.
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports#sample-project)
Sample project
--------------------------------------------------------------------------------------------------------------------------
A sample project is not always required; but, at times issues are too complex to reproduce using the issue template. When this is true we will ask you to create a sample project for us to look at. When including a sample project also state how to use the project.
###
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports#guidelines)
Guidelines
Sample projects should always follow guidelines to keep them simple and small.
* All samples must be within their own folder so when imported into a Unity project they will not be merged with other files. For example, MyBugReport\\Scripts, MyBugReport\\Prefabs, and so on.
* Provide only files needed to reproduce the problem. Do not provide extra models, prefabs, code, etc unrelated to the problem. Delete any code in provided scripts which does not directly affect your issue.
* Do not include Fish-Networking within your sample project; only include the files needed to reproduce the problem.
* Use the old input system.
* Export as a **unitypackage.** To do so right-click your folder, Export Package, and uncheck **Include Dependencies** at the bottom.
GitHub does not allow uploading unitypackage files. You may have to archive your exported package before uploading. Please use zip format when doing so.
Model files can be large and pink materials are not fun to look at! If possible replace models with standard meshes and use the standard render pipeline.

Example of files found within a sample project.
[PreviousTechnical Limitations](https://fish-networking.gitbook.io/docs/guides/troubleshooting/technical-limitations)
[NextReport Example](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports/report-example)
Last updated 1 month ago
---
# Report Example | Fish-Net: Networking Evolved
Below is a bug report for a SyncVar which is not sending to clients. You do not need to include headers as demonstrated; they are only shown here so it's clear what information is being displayed.
If troubleshooting was not performed or applicable fields are missing in the bug report there is a fair chance the submitter would be asked to update their issue, and until then the issue would be suspended.
> **Unity version:**
>
> * Unity 2021.3.10f.
>
>
> **FishNet Version:**
>
> * FishNet 4.3.1
>
>
> **Discord Troubleshot Link/What I've tried:**
>
> * https://discord.com/channels/123456
>
>
> **Description:**
>
> When I set a SyncVar on the server non-host clients do not get the update. Callbacks are not working either.
>
> **Replication:**
>
> This can be reproduced in two editors.
>
> * Start 1st editor as clientHost or server.
>
> * In a player NetworkBehaviour script update an int SyncVar in Awake, wrapped in InstanceFinder.IsServerStarted checks.
>
> * Add
>
> * Start 2nd editor as client only.
>
> * Have editor 1 spawn the player object for 2nd editor.
>
>
> **Expectation:**
>
> * Both the 1st and 2nd editor get callbacks.
>
> * The SyncVar value should synchronize to the 2nd editor.
>
At a glance this would suggest everything is working as intended. The server is not active on the 2nd editor (client only) so the InstanceFinder.IsServerStarted check is failing, and the value is never applied locally. The 1st editor is not sending the value because SyncTypes set in Awake are assumed applied in server and client since Awake always fires regardless of network state.
Although this is covered in the [SyncType documentation](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing)
the behavior could definitely be somewhat of a gotcha. If it's possible the developers troubleshooting steps wouldn't have caught this gotcha, we would likely give the answer above and ask the developer to close the issue if it were now resolved.
[PreviousCreating Bug Reports](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports)
[NextFAQ](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq)
Last updated 1 month ago
---
# Changes in API | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-api#id-4.1.0)
4.1.0
-----------------------------------------------------------------------------------------------------
**NetworkManager**
> **CanLog, Log, LogWarning, LogError**
>
> Errors may show that these methods no longer exist, they however do but with different usage.
>
> These methods have been moved under the namespace FishNet.Managing and are now called using either a NetworkManager reference, valid or null, or by using NetworkManagerExtensions.MethodName.
> **GetPooledInstantiated(GameObject, ushort, bool) is missing**
>
> Changed to GetPooledInstantiated(GameObject, bool).
> **GetPooledInstantiated(int, bool) is missing**
>
> Changed to GetPooledInstantiated(int, ushort, bool).
> **GetPooledInstantiated(NetworkObject, ushort, bool) is missing**
>
> Changed to GetPooledInstantiated(NetworkObject, bool).
> **StorePooledInstantiated(NetworkObject, int, bool) is missing.**
>
> Changed to StorePooledInstantiated(NetworkObject, bool).
> **Authenticator is missing.**
>
> Use ServerManager.GetAuthenticator or ServerManager.SetAuthenticator instead.
> **GetInstance(bool warn = true) is missing.**
>
> Use GetInstance() or TryGetInstance(T).
**TimeManager**
> **LastPacketTick**
>
> Changed from uint to EstimatedTick.
>
> You may see errors such as: cannot convert type 'uint' to 'EstimatedTick'.
>
> Use LastPacketTick.LastRemoteTick. Reviewing the EstimatedTick API is recommended to leverage it's features better.
####
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-api#misc)
Misc
**PooledReader and PooledWriter**
> **Dispose and DisposeLength are missing.**
>
> Use Store and StoreLength.
**ReaderPool and WriterPool**
> **GetReader, GetWriter have been renamed to be consistent with other API.**
>
> Changed to Retrieve.
> **Recycle has been renamed to be consistent with other API.**
>
> Changed to Store.
**Observer Conditions**
> **DistanceCondition.UpdateFrequently is missing.**
>
> Method no longer used.
> **ObserverCondition.Timed is missing.**
>
> Changed to GetConditionType().
> **ObserverCondition.Clone is missing.**
>
> Method no longer used. Use Awake to initialize custom conditions.
> **MatchCondition had several fields replaced. The following fields were removed:**
>
> * **MatchConnections**
>
> * Changed to GetMatchConnections(NetworkManager)
>
> * **ConnectionMatch**
>
> * Changed to GetConnectionMatches(NetworkManager)
>
> * **MatchObject**
>
> * Changed to GetMatchObjects(NetworkManager)
>
> * **ObjectMatch**
>
> * Changed to GetObjectMatches(NetworkManager)
>
**SyncTypes**
> **SyncVar and SyncObject attribute are no longer used.**
>
> Remove SyncVar/SyncObject attribute. When setting or getting the SyncVar's value be sure to use the `.Value` of it instead of trying to set or get it directly.
> **ISyncType, SyncBase.Reset is missing.**
>
> Changed to ResetState.
> **SyncBase.Read(PooledReader) is missing.**
>
> Changed to Read(PooledReader, bool).
> **SyncVar fields must be declared as SyncVar.**
>
> Fields previously identified as SyncVars using the SyncVar attributes must now use SyncVar as the field, and must be initialized like SyncObjects.
>
> Copy
>
> // Example.
> private readonly SyncVar _health = new();
>
> private void MyMethod()
> {
> Debug.Log($"Current health is {_health.Value}");
> // Set health to a new value.
> _health.Value = 10f;
> }
**SceneUnloadEndEventArgs**
> **UnloadedSceneHandles, UnloadedSceneNames, UnloadedScenesV2 is missing.**
>
> Changed to UnloadedScenes.
**PredictedObject**
> **XYZMethod is missing.**
>
> A variety of methods within PredictedObject have been replaced by a simpler variant.
>
> The following methods were removed:
>
> * **GetSmoothTicks**
>
> * **GetInterpolation**
>
> * **SetInterpolation**
>
>
> The removed methods have been replaced with **SetSpectatorSmoothingType.**
**Misc**
> **Broadcast: cannot convert from 'method group'.**
>
> Broadcast handlers now require Channel as the last parameter.
>
> Copy
>
> // Example:
> // Before
> private void OnResponseBroadcast(ResponseBroadcast rb)
> // After
> private void OnResponseBroadcast(ResponseBroadcast rb, Channel channel)
> **IsClient, IsServer, IsHost, IsServerOnly, IsClientOnly are Obsolete.**
>
> These fields return if the socket is started and for many those intentions were not clear. In result all instances have been replaced with Started versions of each; eg: IsClientStarted.
>
> To check if an object is initialized for the server or client use Initialized varients, such as IsClientInitialized.
> **SceneLoad/UnloadData PreferredScene change.**
>
> PreferredScene has been changed to a structure to allow setting separate preferred scenes for server and client.
> **NetworkAnimator.ForceSend is missing.**
>
> Method no longer used. NetworkAnimator.SendAll may be of use.
> **NetworkConnection.Tick is missing.**
>
> Changed to NetworkConnection.LocalTick
> **ServerObjects RebuildObservers method is missing.**
>
> All IEnumerable RebuildObservers methods have been replaced with IList variants.
> **ServerManager.Authenticator is missing.**
>
> Changed to GetAuthenticator and SetAuthenticator.
> **NetworkBehaviour.DirtySyncTypes is missing.**
>
> Method no longer used.
> **NetworkObject.ResetForObjectPool is missing.**
>
> Changed to ResetState.
> **NetworkObject.ClientInitialized is missing.**
>
> Changed to NetworkObject.IsClientInitialized.
> **Replicate and Reconcile attribute Resends is missing.**
>
> Replaced with PredictionManager.RedundancyCount.
> **Rollback(PreciseTick, PhysicsType, bool asOwner)**
>
> Changed to Rollback(PreciseTick, RollbackPhysicsType, bool)
> **ReadDictionary()**
>
> Changed to ReadDictionaryAllocated()
> **ListCache, ListCaches is missing**
>
> Classes replaced with better versions under a different namespace.
>
> The following are their replacements:
>
> * CollectionCaches
>
> * ResettableCollectionCaches
>
> * ObjectCaches
>
> * ResettableObjectCaches
>
> **RetrieveObject(int, bool) is missing.**
>
> Changed to RetrieveObject(int, ushort, bool).
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-api#id-3.3.0)
3.3.0
-----------------------------------------------------------------------------------------------------
Unscheduled break.
> **ObserversRpc IncludeOwner is missing.**
>
> Changed to ExcludeOwner. **Remeber to flip the values.**
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-api#id-3.1.1)
3.1.1
-----------------------------------------------------------------------------------------------------
**Prediction Changes**
Replicate datas must now implement _IReplicateData_, and Reconcile datas must implement _IReconcileData_.
As of this release prediction methods can now have their Channels set, so you may ensure certain messages never drop. In result your replicate method signatures should now be as shown below.
Copy
private void MyReplicate(ReplicateData rd, bool asServer, Channel channel = Channel.Unreliable, bool replaying = false)
Reconcile methods must also now include a Channel parameter as shown.
Copy
private void MyReconcile(ReconcileData rd, bool asServer, Channel channel = Channel.Unreliable)
For more detailed instructions on these changes see the [prediction guide](https://github.com/FirstGearGames/FishNet-Documentation/blob/main/manual/general/changelog/broken-reference/README.md)
.
**TimeManager Fields and Events**
Many prediction related events and values were moved out of the _TimeManager_ and placed into the _PredictionManager_. Use PredictionManager.XYZ instead of TimeManager.XYZ.
The following events and fields were moved.
* LastReconcileTick.
* LastReplicateTIck.
* IsReplaying(), IsReplaying(Scene).
* OnPreReconcile.
* OnPostReconcile.
* OnPreReplicateReplay.
* OnPostReplicateReplay.
In addition two events had their signatures changed. OnPre/PostReplicateReplay now also includes the tick being replayed.
> **Changed Signature OnPre/PostReplicateReplay(PhysicsScene, PhysicsScene2D).**
>
> Replaced with OnPre/PostReplicateReplay(uint, uint).
**Misc**
> **Changed LoggingConfiguration is now a base class.**
>
> LoggingConfiguration can be used to create custom loggers. _LevelLoggingConfiguration_ is now the default logger. If you were previously using a LoggingConfiguration with custom settings create new as a LevelLoggingConfiguration.
> **Changed Signature NetworkConnection.LoadedStartScenes.**
>
> Replaced with NetworkConnection.LoadedStartScenes().
> **Removed RigidbodyPauser.SetTimeManager.**
>
> Replaced with RigidbodyPauser.SetPredictionManager; now takes PredictionManager argument.
> **Removed NetworkBehaviour/NetworkObject.Deinitializing.**
>
> Replaced with NetworkBehaviour/NetworkObject.IsDeinitializing.
> **Removed NetworkObject.SceneObject.**
>
> Replaced with NetworkObject.IsSceneObject.
> **Removed ServerOnlyCondition.**
>
> Replaced with with OwnerOnlyCondition.
> **Removed TimeManager.TickPercent.**
>
> Replaced with TimeManager.GetPreciseTick or TimeManager.GetTickPercent.
> **Removed TimeManager.TicksToTime(bool).**
>
> Replaced with TimeManager.TicksToTime(TickType).
> **Removed TimeManager.OnPhysicsSimulation.**
>
> Replaced with TimeManager.OnPrePhysicsSimulation.
> **Removed NetworkManager.Authenticator.**
>
> Replaced with ServerManager.Get/SetAuthenticator.
> **Removed ServerManager.Authenticator.**
>
> Replaced with ServerManager.Get/SetAuthenticator.
> **Changed Signature Transport.GetServerBindAddress.**
>
> Replaced with Transport.GetServerBindAddress(IPAddressType).
> **Changed Signature Transport.SetServerBindAddress(string).**
>
> Replaced with Transport.SetServerBindAddress(string, IPAddressType).
> **Removed ListCaches.XYZCache.**
>
> Replaced with ListCaches.GetXYZCache, ListCaches.SetXYZCache.
[](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-api#id-2.0.0)
2.0.0
-----------------------------------------------------------------------------------------------------
**Misc**
> **Removed NetworkBehaviour/NetworkObject.OwnerIsValid.**
>
> Replaced with NetworkBehaviour/NetworkObject.Owner.IsValid.
> **Removed NetworkBehaviour/NetworkObject.OwnerIsActive.**
>
> Replaced with NetworkBehaviour/NetworkObject.Owner.IsActive.
> **Changed Name LoadOptions.DisallowStacking.**
>
> Change references from DisallowStacking to AllowStacking and inverse value.
> **Changed Name Several enums are being changed from plural to singular. Those changed will be SceneScopeTypes, ServerUnloadModes, LocalConnectionStates, RemoteConnectionStates.**
>
> Remove plural (s) from each enum reference. EG: SceneScopeTypes will become SceneScopeType.
> **Removed TimeManager.TicksToTimeDouble.**
>
> Replaced with TimeManager.TicksToTime; now returns a double.
> **Changed Signature Transport.Initialize(networkManager).**
>
> Add int as a second parameter to your transport.Initialize method. Include Transport.Index within the following callback structures: ClientConnectionStateArgs, ServerConnectionStateArgs, RemoteConnectionStateArgs, ClientReceivedDataArgs, ServerReceivedDataArgs.
> **Removed Transport.GetChannelCount(), Transport.GetDefaultReliableChannel(), Transport.GetDefaultUnreliableChannel().**
>
> Delete call or overrides to methods. There will always only be two channel counts, 0 for reliable and 1 for unreliable.
> **Removed Transport.GetDefaultReliableChannel() and GetDefaultUnreliableChannel().**
>
> Delete calls or overrides to methods. Channel.Reliable should always be id 0, and Channel.Unreliable id 1.
[PreviousUpdating FishNet](https://fish-networking.gitbook.io/docs/guides/updating-fishnet)
[NextUpgrading to FishNet Pro](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro)
Last updated 1 month ago
---
# PlayFlow Cloud (Recommended) | Fish-Net: Networking Evolved


**PlayFlow** is the easiest way to **build**, **deploy**, and **scale** multiplayer games globally, it's a fantastic tool for any multiplayer games that might have need of dedicated servers. Their outstanding support, reliable service, and competitive pricing make PlayFlow our personal recommendation. They have a powerful API with many useful features that make them stand-out.
Deploy your first server in under 30 seconds for free. No credit card required.

[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#instant-scaling-with-global-deployment)
**Instant scaling with global deployment**
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Effortlessly scale in real time with no surprise costs during traffic surges, and deploy worldwide in seconds using Unity, containers, or your control panel.
**15+**
Global Regions
**<20ms**
Average Latency
**1M+**
Players Served
* * *
###
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#more-key-benefits-of-playflow)
More key benefits of PlayFlow
The PlayFlow Unity SDK provides a powerful and convenient way to manage your game servers, lobbies, and matchmaking directly within the Unity Editor and your game’s C# scripts.
Find out more about PlayFlow's robust features below!
* * *
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#undefined)
-------------------------------------------------------------------------------------------------------
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#better-pricing-than-the-competition)
**Better pricing than the competition**
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
No hidden fees. Transparent pricing — paying only for what you use. You can use their cost estimator to get an idea of what running your game might cost you directly from their website. Check out their full pricing page [here](https://www.playflowcloud.com/#pricing)
.
* * *
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#undefined-1)
---------------------------------------------------------------------------------------------------------
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#matchmaking-and-lobby-system)
**Matchmaking & lobby system**
----------------------------------------------------------------------------------------------------------------------------------------------------------
Complete game lobby system and matchmaking included so you can match-up your players by skill, region, or your own rules.
* * *
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#undefined-2)
---------------------------------------------------------------------------------------------------------
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#generous-free-tier-and-support-that-listens)
**Generous free tier & support that listens**
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Build fast, playtest often. All without pulling out your credit card. **PlayFlow** offers the quickest way to test your game online, directly from the Unity editor, and you can do so for free!
Get help from real people with fast replies, and feedback that actually shapes the platform.
* * *
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#undefined-3)
---------------------------------------------------------------------------------------------------------
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#real-time-metrics-and-powerful-control-panel)
Real-time metrics & **powerful control panel**
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Experience seamless monitoring with the advanced dashboard for complete visibility. Instantly track server health, player counts, CPU/memory usage, and network traffic. Features include real-time performance tracking, customizable alerts, log aggregation, and player activity monitoring for optimal performance.
* * *
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#undefined-4)
---------------------------------------------------------------------------------------------------------
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud#and-still-more)
And still more!
-----------------------------------------------------------------------------------------------------------------------------
Yet more compelling features, **including**...
<5min
Getting Started Time
**Auto-Scaling**
Intelligent demand-based scaling
**Online Cost Estimator**
Instantly Forecast Project Costs
[Website](https://www.playflowcloud.com/)
[Quick Start](https://documentation.playflowcloud.com/quickstart)
[Documentation](https://documentation.playflowcloud.com/quickstart)
[PlayFlow SDK](https://documentation.playflowcloud.com/unity)
[API Reference](https://documentation.playflowcloud.com/api-reference/servers/list-game-servers)
[PreviousServices](https://fish-networking.gitbook.io/docs/guides/server-hosting/services)
[NextGetting Started with PlayFlow](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow)
---
# NetworkHudCanvas | Fish-Net: Networking Evolved
The NetworkHudCanvas prefab can be used to show a simple Heads-Up Display in your game allowing you to quickly start and stop the FishNet server and client.
It also allows you to set an **Auto Start Type**, which will dictate how FishNet behaves as soon as the object is loaded in the game.

Setting the **Auto Start Type** to **Host**
This object is most commonly used for debugging and development.
[PreviousNetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/prefabs/networkmanager)
[NextScriptableObjects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects)
Last updated 1 month ago
---
# Getting Started with AWS | Fish-Net: Networking Evolved

_This tutorial was kindly provided by haseebzahid413#2226._
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/getting-started-with-aws#verify-permissions-for-aws-account)
Verify permissions for AWS account
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. Go to AWS Management Console
2. Launch a Virtual Machine
3. Select any free-tier Linux machine
4. Select any free-tier instance type
5. Edit Security Groups
6. 1. Add Rule
2. Custom TCP Rule - port 7770 (or whatever you want to choose for your game)
3. set Source to anywhere
4. Add Rule
5. UDP rule - port 7770 (or whatever you want to choose for your game)
6. set Source to anywhere
7. Press “Review and Launch”
7. Create a new Key Pair
8. 1. Give it a name
2. download keypair
3. Press “Launch Instance”
9. Download Putty
10. Download WinSCP
11. Open PuttyGen
12. 1. Conversions > Import Key
2. Select the downloaded key
3. Set the right Key Type as you set while creating the key above
4. Save Private Key
5. Close Window
6. This file of type ppk will be used later
13. Open Putty
14. 1. Copy IPV4 DNS address for the instance we created above from AWS EC2 Instances window
2. Putty Configuration > Session > Host Name set this hostname to follows
3. 1. ec2-user@ followed by the DNS address copied above
4. Keep port at 22
5. Connection Type SSH
6. Go to Connection > SSH > Auth
7. 1. Provide the ppk generated above here in “Browse”
8. Go back to Session
9. 1. Provide a name in Saved Sessions to be save this session
2. Press Save
10. Now double click this name in session to open this session
11. Our Putty terminal is up and running on the Linux machine
15. Open WinSCP
16. 1. When asked opt for single window with 2 panels option
2. Login > New Site
3. 1. File Protocol > SCP
2. Paste the same hostname pasted in Putty, or copied from AWS EC2 Instances Console
3. Username > ec2-user
4. Advanced > SSH > Authentication > Private Key File
5. 1. Provide the private key file here
2. Press Okay
6. Press Save
7. Provide a name to this new Login
4. Double click on the login created
5. It will connect to our Linux Server
6. We will use this Window to transfer replace or delete build on our Linux server
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/getting-started-with-aws#configuring-fish-networking)
Configuring Fish-Networking
----------------------------------------------------------------------------------------------------------------------------------------------------------------
1. Add TugBoat component on Network Manager
2. 1. Set IPV4 server bind address to 127.0.0.1, or leave **empty**.
2. Set port to 7770 (or whatever you want to specify but should be allowed in EC2 instance network incoming traffic conditions)
3. Set client address to EC2 instance public IPV4 DNS address
4. Save scene
3. In Build Settings
4. 1. Set target platform to Linux
2. Keep architecture to x86\_64
3. Enable ServerBuild (to keep headless)
4. Make sure the server scene is added and enabled in build settings
5. Build and save in a folder
6. Wait for the build process to complete
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/getting-started-with-aws#deploying)
Deploying
----------------------------------------------------------------------------------------------------------------------------
1. WinSCP
1. Navigate left panel to the unity server build folder
2. Right click and upload that to the linux server
3. It will take some time to upload
4. Once upload complete
2. Putty terminal
1. Go the the Putty terminal window
2. Using standard commands navigate inside the build folder
3. Run commands
4. 1. chmod +x “executable file name of type .x86\_64”
2. ./“executable file name of type .x86\_64”
3. Server is up and running
5. Go back to Unity for Client editor testing or build
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/getting-started-with-aws#connecting-a-client)
Connecting a client
------------------------------------------------------------------------------------------------------------------------------------------------
1. Run in unity
2. Press Client
3. It should run perfectly fine
[PreviousEasy WebGL Hosting with PlayFlow](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow)
[NextMoving to Fish-Networking](https://fish-networking.gitbook.io/docs/guides/upgrading-to-fish-net)
Last updated 1 month ago
---
# Services | Fish-Net: Networking Evolved
We strongly recommend reviewing our [Server Hosting](https://fish-networking.gitbook.io/docs/guides/server-hosting)
page for terminology as well the Pros/Cons of services mentioned on this page.
This information is updated to the best of our knowledge. If you are interested in a service listed below — to better understand their platform — please visit the provided links to their official website.
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services#our-recommended-service)
Our recommended service
-------------------------------------------------------------------------------------------------------------------------------
**PlayFlow Cloud**, a company we've had the pleasure of working with firsthand, is recommended as our top-pick for a hosting service. Their outstanding support, reliable service, and superior pricing have consistently impressed our staff and community.
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud)

**PlayFlow Cloud**
Generous free tier with better pricing than competitors.
 Lobby & Matchmaking, with an included SDK handling the work.
 Worldwide Dedicated and instanced servers.
 User-friendly control panel, metrics, support, and more.
* * *
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services#other-services)
Other services
-------------------------------------------------------------------------------------------------------------
Here is a non-extensive selection of other hosting services that work well with FishNet.
###
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services#dedicated-servers)
Dedicated servers
These hosts offer session-based servers, as well persistent servers. Relay services may be available as well.
[](https://hathora.dev/)

* Pay-per-use pricing.
* Session-based servers available.
* Persistent servers available.
* Relay servers available.
* Match Making / Lobbies.
[](https://edgegap.com/)

* Pay-per-use pricing.
* Session-based servers available.
* Persistent servers available.
* Relay servers available.
* Match Making / Lobbies.
[](https://aws.amazon.com/)

AWS is a bit more difficult to setup and manage. We generally only recommend AWS to experienced developers.
* Pay-per-use pricing — a little more complex.
* Session-based servers available.
* Persistent servers available.
* Relay servers available.
* Match Making / Lobbies.
We have a community guide for AWS: [Community Guide](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/getting-started-with-aws)
* * *
###
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services#relays-only)
Relays only
These are relay only services.
[](https://partner.steamgames.com/doc/features/multiplayer/steamdatagramrelay)

**Steam** relays are offered free when you launch your game on steam; there is a percentage of sales, as well initial fee when using Steam.
We have an official FishNet transport for Steam, and there are third-party Unity assets available as well to help utilize Steam Relays. A popular asset is [Toolkit for Steamworks Foundation by Heathen Engineering](https://github.com/heathen-engineering/Toolkit-for-Steamworks-Foundation)
.
* Free for games launched using Steam.
* Session-based relays.
* Match Making / Lobbies.
* Friends list (Steam).
[](https://onlineservices.epicgames.com/en-US/services)

**EOS** provides a number of features for free. The API and documentation is a bit more complex, which may be difficult to beginners. A vetted third-party [EOS transport](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyeos-epic-online-services)
is available for FishNet, which may help with some of those hurdles.
A cross-platform friends list is possible with EOS but at the cost of complexity; eg: you will not be able to directly access your Steam friends via the EOS platform. With this in mind, match making with friends may be more difficult.
* Free to all developers.
* Session-based relays.
* \*Match Making / Lobbies.
* \*Friends list.
[PreviousTerminology](https://fish-networking.gitbook.io/docs/guides/server-hosting/terminology)
[NextPlayFlow Cloud (Recommended)](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud)
Last updated 1 month ago
---
# NetworkManager | Fish-Net: Networking Evolved
The NetworkManager prefab contains a basic [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
with a [NetworkHudCanvas](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/prefabs/networkhudcanvas)
to provide you with a quick setup for using FishNet in your game.
You can simply add this object into your scene and use the **Server** and **Client** buttons in play mode to start FishNet as a server, client, or both. You can also setup the autostart options on the NetworkHudCanvas child object.
The components this object contains are the NetworkManager, [ObserverManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager)
(with a [Scene Observer Condition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/scenecondition)
), and the PlayerSpawner.
[PreviousPrefabs](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/prefabs)
[NextNetworkHudCanvas](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/prefabs/networkhudcanvas)
Last updated 5 months ago
---
# Components | Fish-Net: Networking Evolved
Many components aim to make development easier, and quicker. For example, if you wish to synchronize animations, you attach the NetworkAnimator component. There are a wide variety of components to choose from.
Pages within this section summarize what each component accomplishes as well provides more in-depth knowledge to the component's settings. A few select components which offer a significant amount of functionality are covered in the [https://github.com/FirstGearGames/FishNet-Documentation/blob/main/fishnet-building-blocks/components/broken-reference/README.md](https://github.com/FirstGearGames/FishNet-Documentation/blob/main/fishnet-building-blocks/components/broken-reference/README.md)
.
[PreviousFAQ](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq)
[NextManagers](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers)
Last updated 5 months ago
---
# Moving to Fish-Networking | Fish-Net: Networking Evolved
Moving to Fish-Networking will vary depending on which previous networking solution you are coming from. With other solutions changing their API so regularly it may be difficult to keep transition information up to date but we will try our best.
If you encounter any questions we welcome you on our Discord, where our helpful community can get you started.
[Join the FirstGearGames / Fish-Networking Discord Server!Discord](https://discord.gg/NqzSEqR)
[](https://fish-networking.gitbook.io/docs/guides/upgrading-to-fish-net#leaving-mirror-networking)
Leaving Mirror Networking
---------------------------------------------------------------------------------------------------------------------------------
More information will be added as it becomes available.
Always backup before making large changes. Having another copy of your project to reference during the upgrade is a great idea!
The majority of these changes can be done by using quick replace within your IDE!
**Mirror example conversion video:**
**Upgrade tool:**
An upgrade tool is provided to help transition from Mirror to Fish-Net. The tool will replace several Mirror components with the like ones for Fish-Net. Note that while the components will be replaced the settings of your components will not be preserved. For best results keep a copy of your original project for reference until switching over.
Currently supported components are:
* NetworkIdentity
* NetworkProximityChecker
* NetworkTransform/Child
* NetworkAnimator
* NetworkSceneChecker
Additional components from FirstGearGames Mirror Assets/Projects are supported:
* FlexNetworkTransform/Child
* FastProximityChecker
* FlexNetworkAnimator
* FlexSceneChecker
The upgrade tool requires scripting defines to function. These defines should be removed after running the upgrade tool.
MIRROR - for Mirror components.
FGG\_ASSETS - for FirstGearGames assets.
FGG\_PROJECTS - for FirstGearGames projects.
Before running the upgrade tool you will likely need to remove a few files. If using FirstGearGames Mirror assets or projects, delete any of the demo folders included for those assets and projects.
In addition, any scripts requiring component NetworkIdentity will need to have the declaring line removed.
Copy
// Replace the following with an empty string.
[RequireComponent(typeof(NetworkIdentity))]
// The hotkey in Visual Studio is Ctrl + Shift + H.
**Component changes:**
Mirror
Fish-Networking
Notes
Interest Management
[ObserverManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager)
see also: [NetworkObserver](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer)
_Both support multiple conditions_
NetworkIdentity
NetworkObject
Changing out components can be a tedious task. Save time by using Window -> Fish-Networking -> Upgrading -> From Mirror -> Replace Components. This will swap out most components for you.
Mirror and Fish-Networking must be within your project to run the operation mentioned. Afterwards you may remove Mirror.
**NetworkBehaviour property renames:**
Each IsServer, IsClient, etc option has two varieties: Initialized and Started.
Initialized means the object has been marked as ready for network use by the side (eg: client or server). Started means the client or server socket is connected, but does not mean the object has been initialized for network use yet.
When converting from Mirror you will most likely want to use Initialized.
Mirror
Fish-Networking
Notes
hasAuthority
IsOwner
_isLocalPlayer removed, use IsOwner instead._
isClient
IsClientInitialized
isClientOnly
IsClientOnlyInitialized
isServer
IsServerInitialized
isServerOnly
IsServerOnlyInitialized
connectionToClient
Owner
_Can be used on client._
connectionToServer
LocalConnection
netId
ObjectId
**NetworkBehaviour callbacks:** callbacks such as OnStartClient for the most part are the same in Fish-Networking. Some of the callbacks do provide additional information which is not available within Mirror's callbacks. There are also several new callbacks to use. For a complete guide on using Fish-Networking callbacks click [here](https://fish-networking.gitbook.io/docs/manual/guides/network-behaviour-guides#callbacks)
.
**Remote Procedure Call renames:** see [Remote Procedure Calls](https://fish-networking.gitbook.io/docs/guides/features/network-communication/remote-procedure-calls)
for enhanced features and usage related to RPCs.
Mirror
Fish-Networking
Notes
\[Command\]
\[ServerRpc\]
\[TargetRpc\]
\[TargetRpc\]
_First parameter must be a NetworkConnection_
\[ClientRpc\]
\[ObserversRpc\]
RPCs within Fish-Networking has many advantages over Mirror; see [Remote Procedure Calls](https://fish-networking.gitbook.io/docs/guides/features/network-communication/remote-procedure-calls)
for more information.
Mirror uses several singletons while Fish-Networking uses an anti-singleton design. There are still easy ways to access similar features. All of the same access can be returned from the NetworkObject component, as well by using [InstanceFinder](https://fish-networking.gitbook.io/docs/guides/features/instancefinder-guides)
.
**Manager renames:** all of these may also be found within the NetworkManager.
Mirror
Fish-Networking
Notes
NetworkManager
NetworkManager
_Unchanged._
NetworkServer
ServerManager
NetworkClient
ClientManager
TransportManager
_Fish-Networking only._
TimeManager
_Fish-Networking only._
SceneManager
_Fish-Networking only._
**Switching from Mirror.NetworkManager:** the NetworkManager in Mirror features several overrides for state changes, such as when clients connect, disconnect, server start or stop, scene changes, and more.
Fish-Networking instead uses sealed managers with events. To mimic the NetworkManager of Mirror create a new MonoBehaviour and place it on your NetworkManager object. Instead of using overrides subscribe to your needed events from each appropriate Fish-Networking manager.
Copy
// Mirror example.
// Called when a remote client connects.
public override OnServerConnect(NetworkConnectionToClient conn) {}
// FishNet example.
// Called when a remote client state changes.
networkManager.ServerManager.OnRemoteConnectionState += YourCallback;
Mirror
Fish-Networking
ServerChangeScene
OnServerChangeScene
OnServerSceneChanged
ClientChangeScene
OnClientChangeScene
OnClientSceneChanged
SceneManager.OnLoadEnd
SceneManager.OnClientPresenceChangeEnd
See [SceneManager](https://fish-networking.gitbook.io/docs/guides/features/scene-management)
guide for more information.
OnServerReady
SceneManager.OnClientLoadedStartScenes
OnServerConnect
OnServerDisconnect
Servermanager.OnRemoteConnectionState
OnServerAddPlayer
OnClientNotReady
OnStartHost
OnStopHost
Not needed.
OnStartServer
OnStopServer
OnServerError
ServerManager.OnServerConnectionState
OnStartClient
OnStopClient
OnClientConnect
OnClientDisconnect
OnClientError
ClientManager.OnClientConnectionState
###
[](https://fish-networking.gitbook.io/docs/guides/upgrading-to-fish-net#automatic-online-offline-scenes)
Automatic online/offline scenes
To mimic the Online and Offline scene setting in the Mirror NetworkManager you can add the [DefaultScene](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/defaultscene)
component to your network manager object and fill it in with your desired scenes.
[PreviousGetting Started with AWS](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/getting-started-with-aws)
[NextTroubleshooting](https://fish-networking.gitbook.io/docs/guides/troubleshooting)
Last updated 1 month ago
---
# DefaultPrefabObjects | Fish-Net: Networking Evolved
The **Default Prefab Objects** asset is a dynamically populated collection of spawnable network objects. FishNet automatically generates it in the designated directory specified in your Fish-Networking configuration, filling it with networked prefabs from the configured locations.
You do not need to manually populate or update this collection, FishNet will take care of it automatically.

Example of **DefaultPrefabObjects** being populated by Networked Prefabs
[PreviousSpawnablePrefabs](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs)
[NextSinglePrefabObjects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs/singleprefabobjects)
Last updated 1 month ago
---
# SinglePrefabObjects | Fish-Net: Networking Evolved
The **Single Prefab Objects** is a scriptable object which you can inherit from for custom functionality. It is used by the DefaultPrefabObjects collection and can also be directly used for your own collections. If using it directly, remember to manually add all your spawnable network object prefabs into its collection.

A **single prefab objects** asset being manually populated
[PreviousDefaultPrefabObjects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs/defaultprefabobjects)
[NextDualPrefabObjects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs/dualprefabobjects)
Last updated 1 month ago
---
# DualPrefabObjects | Fish-Net: Networking Evolved
The Dual Prefab Objects asset can be used to have Fish-Networking spawn a different prefab on the clients as it uses on the server. Whenever you spawn the server selected version, FishNet will spawn the client version on all clients.
You can select the same prefab in both the Server and Client fields to have the same one spawned on all clients as the server.

Example of a **Dual Prefab Objects** asset being populated
[PreviousSinglePrefabObjects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs/singleprefabobjects)
[NextLevelLoggingConfiguration](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration)
Last updated 1 month ago
---
# Lag Compensation | Fish-Net: Networking Evolved
Lag compensation, also known as collider rollback, is the act of placing colliders back in time on the server to provide accurate raycast hit detection regardless of client latency.
[PreviousUsing NetworkColliders](https://fish-networking.gitbook.io/docs/guides/features/prediction/using-networkcolliders)
[NextStates](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/states)
Last updated 1 year ago
---
# ObserverConditions | Fish-Net: Networking Evolved
**ObserverConditions** in Fish-Networking define specific conditions under which clients receive updates about a [NetworkObject's](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/networkobjects)
state. These conditions help optimize network traffic by ensuring that only relevant updates are transmitted, as well as prevent client's from cheating by only sending relevant data to individual clients.
[PreviousScriptableObjects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects)
[NextDistanceCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition)
Last updated 5 months ago
---
# Easy WebGL Hosting with PlayFlow | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#how-playflow-makes-webgl-hosting-easy)
How PlayFlow makes WebGL hosting easy
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
For seamless WebGL gaming experiences in web browsers, secure WebSocket connections are crucial, but configuring them can be complex. Often, developers end up managing certificates and networking issues, which can be time-consuming. **With PlayFlow,** however, you only need to enable a simple option to handle these concerns effortlessly.
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#before-we-begin)
Before we begin...
------------------------------------------------------------------------------------------------------------------------------------------------------------------
This tutorial assumes you've read the [Getting Started with PlayFlow](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow)
tutorial already. In the following steps we will convert our project support WebGL.
1
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#install-bayou)
Install Bayou
For FishNet connections on WebGL we will need to use a web supported transport; there are multiple available, but this tutorial will be using [Bayou](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou)
. Head over to the Bayou Github repo and download the most recently released `unitypackage` file and then import it into your project.
[Release 4.1.5 · FirstGearGames/BayouGitHub](https://github.com/FirstGearGames/Bayou/releases/latest)

2
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#add-bayou-to-your-network-manager)
Add Bayou to your Network Manager
Now that **Bayou** is imported into your project, you can select your [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
and add the component to it.

If you have more than one [transport](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports)
on your **NetworkManager**, such as [Tugboat](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat)
, then you will need to add the [TransportManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager)
component, and drag Bayou into its **Transport** field to set it as the active one.
3
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#enable-wss)
Enable WSS
In the Bayou component, enable the **Use WSS** option. This will tell Bayou to use Web Socket Secure. Doing this will show a bunch of **SSL Configuration** options below, but we don't need to do anything with them for this setup.

4
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#build-your-playflow-server)
Build your PlayFlow server
Open the PlayFlow Cloud Window from the Unity toolbar (**PlayFlow → Playflow Cloud**).
Click the **Upload Server** button to build and upload your Unity server.

5
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#set-the-correct-playflow-port-protocol)
Set the correct PlayFlow port protocol
Open the [PlayFlow dashboard](https://app.playflowcloud.com/)
in your browser and navigate to the **Configuration** tab. Edit or add your port and choose the **TCP** protocol and be sure to **Enable TLS**.

Choosing the correct protocol for WebGL
6
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#start-a-playflow-server)
Start a PlayFlow server
Now head over to the **Server** tab in PlayFlow and create your server instance.

7
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#prepare-your-client-build)
Prepare your client build
If you click on your server instance's **Details**, you will see a **Host** and **External Port** that you will be able to connect your clients to. Open Unity, select the Bayou component, and enter these into the **Client Address** and **Port** fields respectively.


8
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#building-your-webgl-client)
Building your WebGL client
Now let's build the WebGL client. In your Unity build profiles, be sure to switch to the **Web Platform** and then build your game. Once that's done you can zip the built files and upload it to your chosen hosting site and run your game in the browser!

For this test we have created a project on Itch.io and uploaded the client build to it.

[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow#success)
Success!
------------------------------------------------------------------------------------------------------------------------------------------------
Just like that, we were able to create a server and have our clients in the web browser securely connect to it. If you want to check out more of their features, you can check out their documentation here: [https://documentation.playflowcloud.com/](https://documentation.playflowcloud.com/)
You are also encouraged to join their Discord server here: [https://discord.gg/P5w45Vx5Q8](https://discord.gg/P5w45Vx5Q8)
[PreviousGetting Started with PlayFlow](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow)
[NextGetting Started with AWS](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/getting-started-with-aws)
Last updated 3 months ago
---
# Getting Started with PlayFlow | Fish-Net: Networking Evolved
* * *
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#written-tutorial)
Written tutorial
--------------------------------------------------------------------------------------------------------------------------------------------------------------
This guide assumes you have some or all of your game already written using FishNet and are now ready to use PlayFlow to implement a dedicated server. You can also use PlayFlow throughout the development process as its one-click deployment makes it easy to setup a temporary server for testing.
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#before-we-begin)
Before we begin...
---------------------------------------------------------------------------------------------------------------------------------------------------------------
1
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#starting-project)
Starting project
If you don't have a project already setup but want to follow this tutorial, you can use the [Getting Started](https://fish-networking.gitbook.io/docs/tutorials/getting-started)
FishNet tutorial project. The files for it can be downloaded here:
[Getting Started Project](https://github.com/maxkratt/fish-networking-getting-started/releases/download/using-syncvars-to-sync-colors/using-syncvars-to-sync-colors.unitypackage)
2
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#install-the-playflow-sdk)
Install the PlayFlow SDK
Now that we're ready to start, let's install [PlayFlow Cloud](https://www.playflowcloud.com/)
. You can directly import it with the following git URL:
Copy
https://github.com/PlayFlowCloud/PlayFlow-Multiplayer-Unity-SDK.git
Simply add this through the Unity Package Manager and you'll be ready to continue!
If you need more detailed instructions for this step, check out **PlayFlow's** own tutorial page dedicated to it here.
[Installation Guide](https://documentation.playflowcloud.com/guides/installation)
3
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#add-the-necessary-unity-modules)
Add the necessary Unity modules
The next thing we need to do is ensure our Unity installation has the correct modules for building a server. Install the **Linux Build Support** modules for your Unity version in the Unity Hub.
Exact details on the required modules depending on your Unity version can be found here:
[Unity Modules Setup](https://documentation.playflowcloud.com/guides/unity-modules)
4
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#add-tugboat)
Add Tugboat
Select the [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
in your project and add the [Tugboat](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat)
component if it isn't already there (If you are using a different [transport](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports)
, that is also fine).
Enable the **Reuse Address** checkbox, this will be needed for our server to work correctly.

The other two fields we'll be paying attention to are the _Port_ and _Client Address_ ones. For now you can leave the default settings, we'll remember the port number for later and we'll use the _Client Address_ field in our client build to input the URL of our hosted server.
5
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#manage-auto-start)
Manage Auto Start
We will want FishNet to automatically start as a server in the server build we make. FishNet will actually do this by default with the [Start On Headless](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#start-on-headless)
option on the [ServerManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager)
. If you disabled this, be sure to manage starting the server itself, or simply re-enable it.
If we have set the [NetworkHudCanvas](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/prefabs/networkhudcanvas)
_Auto Start Type_ to something other than **Disabled**, then we will want to disable it now, since we want our server to only behave as a server.

Switch Auto Start Type to Disabled
Once that's all done we can move on to using PlayFlow Cloud!
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#deploying-your-game-with-playflow)
Deploying your game with PlayFlow
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#create-your-playflow-account)
Create your PlayFlow account
Now that PlayFlow is installed, let's go to the website and setup our dashboard.
Go to the [PlayFlow Cloud website](https://app.playflowcloud.com/)
and sign-up using your email, or log in with your GitHub or Google account. If asked, confirm your email address to complete the setup.
2
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#create-a-game-studio)
Create a game studio
You'll now be prompted to create a Game Studio. Game Studios make it easy to organize your game projects and work smoothly with your team.
Enter a name for studio and select either the **Hobby** or **Pro** plan, you can read more about the plan types [here](https://documentation.playflowcloud.com/fundamentals/plan-instance-types)
. For this tutorial we will be using the **Hobby** plan, but don't worry, you can always change the plan and even the name after it's created.
Once you've done that, click **Create Studio** and you'll be good to continue.
If you've chosen the **Pro** plan, you will also be able to manage **Team Collaboration** after your studio is created.
3
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#create-a-new-project)
Create a new project
Now that you've created your first Studio you'll be prompted to choose it and then we can move forward with creating a new project.
Click the **Create New Project** button and let's enter the details of your project.
* **Project Name:** give your project any fitting name you'd like.
* **Game Engine:** Select _**Unity**_ as the **Game Engine** as that's what we are using**.**
* **Game Type:** You can choose the game type that fits your project best, for this guide we'll simply choose _**Other.**_
You can now click **Create Project** to proceed,
4
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#explore-the-dashboard)
Explore the dashboard
With your new project created and selected, you can check out the **PlayFlow** dashboard for it.
PlayFlow has a lot of powerful features and makes it very easy for you, the developer of your game, to view the logs, metrics, server details and more. The PlayFlow dashboard can also be used to directly upload your game's server builds and manage server instances.

Once you're done looking around, we'll jump into setting up our server build and running it.
5
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#link-the-playflow-sdk-to-your-project)
Link the PlayFlow SDK to your project
Now let's link our Unity Project to the PlayFlow one we've just created.
1. Open the **Overview** page in the PlayFlow dashboard.
2. Find the **API Keys** section and click the **View API Keys** button. Then copy the **PlayFlow API Key** to your clipboard.
3. Now go to the Unity Editor and open the PlayFlow window from the Toolbar at **PlayFlow → PlayFlow Cloud**.
4. Inside the _Token_ field, paste the **PlayFlow API Key** you copied.

6
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#build-and-upload-the-server)
Build and upload the server
You should now specify the scene that the server should start in with the **Server Scene** field. You can set it manually by selecting the chosen scene through the dropdown or you can make PlayFlow use the **Build Settings' Scene List** instead, by enabling that option.
Don't forget to add your scenes to Unity's build settings scene list!
You can also customize the other settings in the PlayFlow Cloud window, such as the **Development Build** or **Build Version**.
When you're happy with those, you can press the **Upload Server** button to have PlayFlow automatically build and upload a headless Linux server build of your game. This will take a brief moment, and then you will have a log in the editor console saying the build uploaded successfully.
If needed, you can browse the files of the build and delete it directly from the PlayFlow Dashboard under the Builds tab; pressing the **View Builds** button in the PlayFlow window will open this directly for you.
7
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#setup-the-playflow-port)
Setup the PlayFlow port
Now we will setup the port to use in the PlayFlow dashboard. Open up the website and head to the **Configuration** tab and then **Network Ports** section. Click the **Add Your First Port** button and fill in the fields.

* **Port Name:** We can enter a simple name for it here, we'll just call ours `getting_started_udp`.
* **Port Number:** This field should be filled in with the port we have entered in our Transport's _Port_ field. Since we are using Tugboat, the default is `7770`, so enter that now.
* **Protocol:** This is the protocol used by your transport, Tugboat uses UDP, so leave that as the option.
* **Description (Optional):** This field is optional and self-explanatory.
Once those are entered, click the **Add Port** button to finish this step.
8
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#create-the-server)
Create the server
Now we are ready to start our server, head over to the Servers tab and click the **Create Your First Server** button.

A window will pop-up letting you customize the settings for this server, we've changed the **Name** to `FishNet Getting Started`, you can of course choose any name you like as well as customizing the other settings to better suit your needs. Once you are happy, press **Create** Server.
You should now see the server in the Servers tab and you can see its details or stop it directly from here.

9
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#connect-to-the-server)
Connect to the server
Click on the **Details** button to see the details of the server. You can view the Details, Metrics, and Logs of the server here; we will look at the **Details → Network** section and copy the _Host_ and the _External Port_ fields.

In the Unity Editor, select the Tugboat component (or other transport you may be using).
* Enter the IP Address you copied from the **Host** field into the Transport's _Client Address_ field.
* Enter the P**ort** you copied into the Transport's _Port_ field.
10
####
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#test-the-game)
Test the game
You can now run the game or build and run it and connect as a client. Your game should connect to the PlayFlow server we setup and work correctly!
[](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/getting-started-with-playflow#take-the-next-steps)
Take the Next Steps!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Well done! You've now learned how to setup and deploy your server using PlayFlow. If you want to check out more of their features, you can check out their documentation here: [https://documentation.playflowcloud.com/](https://documentation.playflowcloud.com/)
You are also encouraged to join their Discord server here: [https://discord.gg/P5w45Vx5Q8](https://discord.gg/P5w45Vx5Q8)
[PreviousPlayFlow Cloud (Recommended)](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud)
[NextEasy WebGL Hosting with PlayFlow](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud/easy-webgl-hosting-with-playflow)
Last updated 1 month ago
---
# LevelLoggingConfiguration | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration#server-and-host)
Description
------------------------------------------------------------------------------------------------------------------------------------------------
The **Level Logging Configuration** scriptable object simply allows you to customize Fish-Networking's logging. Once created, it can be selected on the [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
component. There are four logging levels available for the various build and editor types. **Off** will permit no logs, **Error** will only permit direct error logs, **Warning** will allow error and warning logs, and **Common** will allow all logging, including errors, warnings, and informational logs.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration#server-and-host-1)
Settings
-----------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration#is-enabled)
⚙️ **Is Enabled**
> This is simply a toggle to enable and disable all of Fish-Networking's logs.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration#add-local-tick)
⚙️ Add Local Tick
> This option allows you to prepend the network's local tick when log was made onto the log message. This can be quite handy for precise debugging.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration#add-timestamps)
⚙️ **Add Timestamps**
> This allows you to prepend to all logs the local date and time when the log was made.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration#enable-timestamps-in-editor)
⚙️ Enable Timestamps In Editor
> Since Unity's console already includes the time that logs are sent at, it can be handy to hide FishNet's Timestamps in the editor and only display them in builds.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration#development-logging)
⚙️ **Development Logging**
> This controls the level of logs sent while the game is a development build or editor.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration#gui-logging)
⚙️ **GUI Logging**
> This controls the level of logging to use when the game is built regularly, as opposed to a headless (non GUI) build.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/levelloggingconfiguration#headless-logging)
⚙️ **Headless Logging**
> This controls the logging level for headless game builds.
[PreviousDualPrefabObjects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs/dualprefabobjects)
[NextTransports](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports)
Last updated 1 month ago
---
# OwnerOnlyCondition | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/owneronlycondition#server-and-host)
Description
------------------------------------------------------------------------------------------------------------------------------------------------------------
The **Owner Only Condition** evaluates to true when a player owns the object. An owner condition will make an object only visible to its owner. If there is no owner, the object will not be visible to any clients. This can be very useful for sharing information with only the owner client, for example inventory data or a player's hand of cards, which shouldn't be shared with other clients to prevent cheating and wasted bandwidth.

[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/owneronlycondition#server-and-host-1)
Settings
-----------------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/owneronlycondition#add-order)
⚙️ **Add Order**
> This controls the order in which this observer condition will be evaluated on an object.
>
> This can be very useful when having observer conditions that are more computationally complex than others, as it allows you to choose the order in which they will be evaluated. Timed conditions are always evaluated after non-timed conditions.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/owneronlycondition#is-constant)
⚙️ **Is Constant**
> Is used to declare whether the condition's settings or data will remain unchanged at runtime. Its purpose is to optimize performance by avoiding unnecessary updates or recalculations for conditions that do not change during execution. It is currently not implemented, but is available for future use and can already be set.
[PreviousMatchCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/matchcondition)
[NextSceneCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/scenecondition)
Last updated 1 month ago
---
# Network Collider | Fish-Net: Networking Evolved
Each component offers callbacks for OnEnter, OnStay, and OnExit, which work even during the prediction cycle. These components are needed because of a limitation in Unity's physics system that affects their OnCollisionEnter and OnCollisionExit methods, causing them to not always be executed.
Fun fact: Fish-Networking is the only framework which provides a solution for using Enter/Exit collider callbacks with prediction!
Due to the complexity of physics with prediction we currently only support these components on primitive shapes: box, cube, sphere, circle, etc.
[PreviousPrediction](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction)
[NextNetworkCollision](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision)
Last updated 1 year ago
---
# DistanceCondition | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition#server-and-host)
Description
-----------------------------------------------------------------------------------------------------------------------------------------------------------
The **Distance Condition** ensures that an object is only observed if it is at least a specified minimum distance away from all objects owned by a client. The Distance Condition is a Timed Condition.

[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition#server-and-host-1)
Settings
----------------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition#add-order)
⚙️ **Add Order**
> This controls the order in which this observer condition will be evaluated on an object.
>
> This can be very useful when having observer conditions that are more computationally complex than others, as it allows you to choose the order in which they will be evaluated. Timed conditions are always evaluated after non-timed conditions.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition#is-constant)
⚙️ **Is Constant**
> Is used to declare whether the condition's settings or data will remain unchanged at runtime. Its purpose is to optimize performance by avoiding unnecessary updates or recalculations for conditions that do not change during execution. It is currently not implemented, but is available for future use and can already be set.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition#maximum-distance)
⚙️ **Maximum Distance**
> The maximum distance that any object owned by a client must be within an object to observe it. If all of the client's owned [NetworkObjects](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/networkobjects)
> are farther than this distance, the object will not be visible to them.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition#hide-distance-percent)
⚙️ **Hide Distance Percent**
> **This** determines an additional buffer zone beyond the maximum distance before an object is hidden. The purpose of the "Hide Distance Percent" is to prevent objects from flickering in and out of visibility when a client is near the maximum distance threshold. It creates a smoother transition for hiding objects by adding a percentage-based distance buffer. As an example, if the **Maximum Distance** is set to `100f` and the **Hide Distance Percent** is `0.5` (50%), the object will remain visible until the client is `150f` units away. This ensures objects do not disappear immediately as they cross the initial visibility boundary.
[PreviousObserverConditions](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions)
[NextGridCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/gridcondition)
Last updated 1 month ago
---
# SpawnablePrefabs | Fish-Net: Networking Evolved
Fish-Networking uses a collection of prefabs to manage spawning of network objects across the network. Whenever you instantiate and [spawn](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/spawning)
an object on the server, FishNet will use the selected **Spawnable Prefabs** collection to find which object it is and to automatically instantiate and link the objects on all clients.
The **Spawnable Prefabs** collection can be set on your [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
component.
The NetworkManager will automatically set the **Spawnable Prefabs** to an automatically managed [DefaultPrefabObjects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs/defaultprefabobjects)
asset if a custom one is not selected.

The **Spawnable Prefabs** field on the NetworkManager
[PreviousSceneCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/scenecondition)
[NextDefaultPrefabObjects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs/defaultprefabobjects)
Last updated 6 months ago
---
# States | Fish-Net: Networking Evolved
States sometimes need to be synchronized between clients and server to prevent desynchronization. This is generally only true when using client-side prediction. However, it is possible this guide could be used outside prediction so please keep that in mind when reading.
Ideally when using prediction the client should run all states locally as they would normally occur, just like the server. For example, if you were to drive a ship into the wall and want to apply a slow, the client and server would apply the state immediately when hitting the wall. In such a scenario the states would most likely exist in the replicate and reconcile data. However, there are cases when only a server is aware of a state, and if the server applies the state before the client does a desynchronization will occur. If this is the design you are intending, consider reworking your logic so clients and server run the same simulation instead; otherwise, continue reading!
A common state that requires synchronizing as example given is something that would impact movement. In this guide I'll be demonstrating on how to apply an EMP.
Since only the server is aware when the state is applied we will perform a check on the server, using the _base.IsServer_ check. When the condition is satisfied as by our pretend _ApplyEmp()_ method a RPC is sent.
Copy
private void TimeManager_OnTick()
{
/* We're going to pretend there is
* some logic here which happens only on the
* server resulting in applying a EMP.
*
* The EMP is set to apply 50ms in the future.
* However many ticks used are up to you. The goal is
* to give clients a chance to get the emp tick
* before that tick actually runs on their end.
* This will have clients all run the EMP at roughly
* the same time, keeping in mind there is sometimes a
* small margin of error of 1 tick. */
if (base.IsServer && ApplyEMP())
{
uint futureTicks = base.TimeManager.TimeToTicks(0.05f, TickRounding.RoundUp);
ObserversSetEMPTick(base.TimeManager.LocalTick + futureTicks);
}
}
// RunLocally is used to the server also sets the emp tick.
[ObserversRpc(RunLocally = true)]
private void ObserversSetEMPTick(uint serverTick)
{
// Converts the server EMP tick to local tick for this client.
_empStartTick = base.TimeManager.TickToLocalTick(serverTick);
// Set end tick. In our example the EMP will last 1 second.
_empEndTick = _empStartTick + base.TimeManager.TimeToTicks(1f, TickRounding.RoundUp);
}
When the RPC is received two fields are set, a tick when to start the EMP and when to end it.
Next in our replicate method if the clients or servers LocalTick is within that EMP duration we prevent any further motor movement. As mentioned this example uses prediction but you could apply this to an Update loop as well if not using prediction.
Copy
// Tick when to start emp.
private uint _empStartTick = uint.MaxValue;
// Tick when to end emp.
private uint _empEndTick = uint.MaxValue;
/* This is an example of a replicate data excluding the extra
* parameters, given they have no context in this example. */
[Replicate]
private void Replicate(MotorData md)
{
uint localTick = base.TimeManager.LocalTick;
/* If localTick is between EMP range then return.
* It's important to not reset the emp values because
* we want these to be the same during replays. If you reset
* values soon as the condition of exiting emp was satisfied
* then emp would not be properly set during a replay.
*
* Note that this logic runs on the server and owner,
* and if using prediction v2 can run on other clients
* as well. */
if (localTick >= _empStartTick && localTick <= _empEndTick)
{
/* Since under emp exit method early
* to not process MotorData. In this example
* we are using an EMP state, therefor the motor
* will not work. You'll adjust this to whatever
* your game needs. */
return;
}
// Normal motor logic here.
}
Just like that the client is set to apply the EMP marginally in the future, and as will the server. Yes, this does create a very small delay on when the EMP or state begins but this is often considered acceptable to maintain a reliable simulation. In addition, also as said before, ideally the client will be running the same simulation as the server at all times which would let you avoid this sort of setup.
[PreviousLag Compensation](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation)
[NextRaycast](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/raycast)
Last updated 1 month ago
---
# Code Stripping (Pro Feature) | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/guides/features/code-stripping#why-use-code-stripping)
Why use code stripping?
------------------------------------------------------------------------------------------------------------------------------
It helps secure your game server by removing sensitive logic that players shouldn’t see. This makes it harder for cheaters to figure out how the server works and keeps sensitive server data hidden.
[](https://fish-networking.gitbook.io/docs/guides/features/code-stripping#what-gets-stripped)
What gets stripped
---------------------------------------------------------------------------------------------------------------------
FishNet Pro can remove server code from non-server builds and client code from server builds. The code it strips is code within [RPCs](https://fish-networking.gitbook.io/docs/guides/features/network-communication/remote-procedure-calls)
, code marked with the [Server or Client attributes](https://fish-networking.gitbook.io/docs/guides/features/server-and-client-identification/executing-on-server-or-client#method-attributes)
, as well as server and client only callbacks such as [OnStartServer/OnStartClient](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#callbacks)
.
[](https://fish-networking.gitbook.io/docs/guides/features/code-stripping#how-to-use-it)
How to use it
-----------------------------------------------------------------------------------------------------------
1. To use FishNet's code stripping you will firstly need to have **FishNet Pro** installed, you can find details for how to install it here: [Upgrading to FishNet Pro](https://fish-networking.gitbook.io/docs/guides/updating-fishnet/upgrading-to-fishnet-pro)
2. Next, you can navigate to the **FishNet Configuration menu** through the Unity toolbar:

**(Tools → Fish-Networking → Configuration)**
3. On the Configuration page you will see the option to **"Strip Release Builds"**, enable it.

4. There is now the **"Stripping Type"** option that you can switch between **Redirect** and **Empty\_Experimental**. **Redirect** will replace the methods and calls with a dummy method that doesn't contain any of the logic, while **Empty\_Experimental** will keep the same method, but will strip its method body, leaving it empty. You can use either option you want to.
5. Now you will need your game to recompile its scripts, you can trigger this by changing something in your code. If your code is in a separate assembly, be sure to trigger that assembly to recompile as well. This is only needed after you change the FishNet stripping settings.
6. That's all you need to do, you can now build your game, and FishNet will automatically strip the code for you.
[](https://fish-networking.gitbook.io/docs/guides/features/code-stripping#confirming-it-worked)
Confirming it worked
-------------------------------------------------------------------------------------------------------------------------
It's always a good idea to check if the sensitive code was indeed stripped from the builds. For Unity Mono builds you can easily do so using a tool such as [ILSpy](https://github.com/icsharpcode/ILSpy)
.
You can download the above-mentioned tool or another of your choosing. Then you'll want to run it and load the chosen assembly in your built game's files. If you find your script, you should see how FishNet stripped its code according to the build.
In the picture below you can see how the `ClientMethod` has had its method body emptied in this server build.

[PreviousProjectiles](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/projectiles)
[NextUpdating FishNet](https://fish-networking.gitbook.io/docs/guides/updating-fishnet)
Last updated 10 days ago
---
# GridCondition | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/gridcondition#server-and-host)
Description
-------------------------------------------------------------------------------------------------------------------------------------------------------
The **Grid Condition** is similar to the [DistanceCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition)
and evaluates to true if clients are within specified distance of the object. The Grid Condition is however less accurate but more performant; it is also a Timed Condition. This condition requires you to place a [HashGrid](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager/hashgrid)
on or beneath your [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
object.

[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/gridcondition#server-and-host-1)
Settings
------------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/gridcondition#add-order)
⚙️ **Add Order**
> This controls the order in which this observer condition will be evaluated on an object.
>
> This can be very useful when having observer conditions that are more computationally complex than others, as it allows you to choose the order in which they will be evaluated. Timed conditions are always evaluated after non-timed conditions.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/gridcondition#is-constant)
⚙️ **Is Constant**
> Is used to declare whether the condition's settings or data will remain unchanged at runtime. Its purpose is to optimize performance by avoiding unnecessary updates or recalculations for conditions that do not change during execution. It is currently not implemented, but is available for future use and can already be set.
[PreviousDistanceCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition)
[NextHostOnlyCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/hostonlycondition)
Last updated 1 month ago
---
# HostOnlyCondition | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/hostonlycondition#server-and-host)
Description
-----------------------------------------------------------------------------------------------------------------------------------------------------------
The **Host Only Condition** evaluates to true when the player is a client host. Any connection which is not client host will fail this evaluation. You can use this observer condition to only show objects to the host player, either permanently or temporarily. This condition is not a timed condition.

[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/hostonlycondition#server-and-host-1)
Settings
----------------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/hostonlycondition#add-order)
⚙️ **Add Order**
> This controls the order in which this observer condition will be evaluated on an object.
>
> This can be very useful when having observer conditions that are more computationally complex than others, as it allows you to choose the order in which they will be evaluated. Timed conditions are always evaluated after non-timed conditions.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/hostonlycondition#is-constant)
⚙️ **Is Constant**
> Is used to declare whether the condition's settings or data will remain unchanged at runtime. Its purpose is to optimize performance by avoiding unnecessary updates or recalculations for conditions that do not change during execution. It is currently not implemented, but is available for future use and can already be set.
[PreviousGridCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/gridcondition)
[NextMatchCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/matchcondition)
Last updated 1 month ago
---
# FishyWebRTC | Fish-Net: Networking Evolved
This transport is fully functional with the latest Fish-Networking version.
For installation and usage please visit the project's [GitHub here](https://github.com/cakeslice/FishyWebRTC)
.
[PreviousBayou](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou)
[NextFishyUnityTransport](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyunitytransport)
Last updated 1 year ago
---
# Utilities | Fish-Net: Networking Evolved
[PingDisplay](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/pingdisplay)
[BandwidthDisplay](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay)
[Authenticator](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/authenticator)
[PreviousPredictedSpawn](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedspawn)
[NextPingDisplay](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/pingdisplay)
Last updated 5 months ago
---
# MatchCondition | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/matchcondition#server-and-host)
Description
--------------------------------------------------------------------------------------------------------------------------------------------------------
The **Match Condition** evaluates to true when players or objects share the same match. Both owned and non-owned objects can be added to matches. Objects or players not added to matches will have their data synchronized with everyone, unless prevented by another condition. See the [MatchCondition api](https://fish-networking.com/FishNet/api/api/FishNet.Component.Observing.MatchCondition.html)
for more information on usage. This condition is not a timed condition.

[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/matchcondition#server-and-host-1)
Settings
-------------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/matchcondition#add-order)
⚙️ **Add Order**
> This controls the order in which this observer condition will be evaluated on an object.
>
> This can be very useful when having observer conditions that are more computationally complex than others, as it allows you to choose the order in which they will be evaluated. Timed conditions are always evaluated after non-timed conditions.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/matchcondition#is-constant)
⚙️ **Is Constant**
> Is used to declare whether the condition's settings or data will remain unchanged at runtime. Its purpose is to optimize performance by avoiding unnecessary updates or recalculations for conditions that do not change during execution. It is currently not implemented, but is available for future use and can already be set.
[PreviousHostOnlyCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/hostonlycondition)
[NextOwnerOnlyCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/owneronlycondition)
Last updated 1 month ago
---
# NetworkCollision | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision#description)
Description
--------------------------------------------------------------------------------------------------------------------------------------------------------
This component is used for receiving collision events for prediction enabled objects. It is very much equivalent to a Collider's `OnCollisionEnter`, `OnCollisionExit`, and `OnCollisionStay` messages, except that to receive these you would add this component to your game object and subscribe to its public events.
Check out this API page [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.Prediction.NetworkCollider.html)
for the specific details.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision#settings)
Settings
--------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision#maximum-simultaneous-hits)
⚙️ **Maximum Simultaneous Hits**
> This is the maximum number of simultaneous hits that the component will check for. You can use this field to customize how many overlapping colliders the component should be able to detect. It should be noted that having too large of a value will decrease its performance. In most cases, the default value of 16 suffices.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision#additional-size)
⚙️ **Additional Size**
> The **Additional Size** determines the distance in units by which collision traces are extended. This extension helps prevent missed overlaps when colliders do not intersect sufficiently. Depending on the scale used in your game you may want to raise or lower this value.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision#layers)
⚙️ **Layers**
> These are the Layers to detect collisions on. This is used when value is not set as **Nothing**.
[PreviousNetwork Collider](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider)
[NextNetworkCollision2D](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision2d)
Last updated 1 month ago
---
# Prediction | Fish-Net: Networking Evolved
There are a number of components specifically used for prediction. These include components specifically tied to the Client-Side Prediction system as well as ones that are not. Other components such as the NetworkObject can also have settings related to prediction, but they are not included in this subsection.
Also consider viewing the [PredictionManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/predictionmanager)
to customize global prediction settings.
[PreviousDebugManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager)
[NextNetwork Collider](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider)
Last updated 5 months ago
---
# NetworkBehaviour | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-behaviour-components#description)
Description
----------------------------------------------------------------------------------------------------------------------------------------
NetworkBehaviour(s) cannot be added to objects directly. This script must be inherited from before it may be included on an object. Inheriting from NetworkBehaviour allows access to [network communications](https://fish-networking.gitbook.io/docs/guides/high-level-overview/terminology/communicating)
and other useful data about the network, server, and client.
Each NetworkBehaviour must be attached to a GameObject that also has a NetworkObject component on it or one of its parent objects.
Adding a NetworkBehaviour derived component at run-time is not yet supported.
Please check out the guide page for more information about all the things you can do with NetworkBehaviours:
[](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides)
📘 NetworkBehaviour Guide
[](https://fish-networking.com/FishNet/api/api/FishNet.Object.NetworkBehaviour.html)
🔌 NetworkBehaviour API
[PreviousNetworkObject](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-object)
[NextNetworkTransform](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform)
Last updated 3 months ago
---
# Projectiles | Fish-Net: Networking Evolved
Projectiles which move over time can have lag hidden by accelerating the projectiles for the server and spectators, while allowing the firing client to show the projectile immediately.
Another bonus to this approach is you are not networking the projectile movement each tick, which saves tremendously on bandwidth and performance.
Here is an example of what this guide will cover. Notice how even though the client has a 220ms ping the projectile is still aligned on the server. Other clients would align the projectile as well with the same guide code.

First the local client, or owning client, fires the projectile. The projectile is spawned locally, then the client tells the server to also fire the projectile. The MAX\_PASSED\_TIME constant is covered in the next code snippet.
Copy
///
/// Projectile to spawn.
///
[Tooltip("Projectile to spawn.")]
[SerializeField]
private PredictedProjectile _projectile;
///
/// Maximum amount of passed time a projectile may have.
/// This ensures really laggy players won't be able to disrupt
/// other players by having the projectile speed up beyond
/// reason on their screens.
///
private const float MAX_PASSED_TIME = 0.3f;
///
/// Local client fires weapon.
///
private void ClientFire()
{
Vector3 position = transform.position;
Vector3 direction = transform.forward;
/* Spawn locally with 0f passed time.
* Since this is the firing client
* they do not need to accelerate/catch up
* the projectile. */
SpawnProjectile(position, direction, 0f);
// Ask server to also fire passing in current Tick.
ServerFire(position, direction, base.TimeManager.Tick);
}
///
/// Spawns a projectile locally.
///
private void SpawnProjectile(Vector3 position, Vector3 direction, float passedTime)
{
PredictedProjectile pp = Instantiate(_projectile, position, Quaternion.identity);
pp.Initialize(direction, passedTime);
}#
When the server receives the fire request it will calculate how long it took the client to send the fire message using the provided tick. Later on the projectile will be accelerated based on this time passed.
After the _passedTime_ is calculated, spawn the projectile on the server, then tell spectators to also spawn the projectile; spectators being other clients.
Copy
///
/// Fires on the server.
///
/// Position to spawn projectile.
/// Direction to move projectile.
/// Tick when projectile was spawned on client.
[ServerRpc]
private void ServerFire(Vector3 position, Vector3 direction, uint tick)
{
/* You may want to validate position and direction here.
* How this is done depends largely upon your game so it
* won't be covered in this guide. */
// Get passed time. Note the false for allow negative values.
float passedTime = (float)base.TimeManager.TimePassed(tick, false);
/* Cap passed time at half of constant value for the server.
* In our example max passed time is 300ms, so server value
* would be max 150ms. This means if it took a client longer
* than 150ms to send the rpc to the server, the time would
* be capped to 150ms. This might sound restrictive, but that would
* mean the client would have roughly a 300ms ping; we do not want
* to punish other players because a laggy client is firing. */
passedTime = Mathf.Min(MAX_PASSED_TIME / 2f, passedTime);
// Spawn on the server.
SpawnProjectile(position, direction, passedTime);
// Tell other clients to spawn the projectile.
ObserversFire(position, direction, tick);
}
Observers use the same technique to calculate the passed time and spawn the projectile. There are a few small things to note.
First, this RPC is sent to everyone but the owner. The owner does not need to receive the RPC because it already spawned the projectile locally.
Second, the passed time calculation is not limited by half. This is to support the maximum possible passed time. This is not a requirement, but is recommended.
Copy
///
/// Fires on all clients but owner.
///
[ObserversRpc(IncludeOwner = false)]
private void ObserversFire(Vector3 position, Vector3 direction, uint tick)
{
// Like on server get the time passed and cap it. Note the false for allow negative values.
float passedTime = (float)base.TimeManager.TimePassed(tick, false);
passedTime = Mathf.Min(MAX_PASSED_TIME, passedTime);
// Spawn the projectile locally.
SpawnProjectile(position, direction, passedTime);
}
With the projectile spawned all that's left is showing how to use the calculated passed time. You likely noticed the **SpawnProjectile** method was initializing the projectile with some values. Here's what that looks like:
Copy
///
/// Direction to travel.
///
private Vector3 _direction;
///
/// Distance remaining to catch up. This is calculated from a passed time and move rate.
///
private float _passedTime = 0f;
///
/// In this example the projectile moves at a flat rate of 5f.
///
private const float MOVE_RATE = 5f;
///
/// Initializes this projectile.
///
/// Direction to travel.
/// How far in time this projectile is behind te prediction.
public void Initialize(Vector3 direction, float passedTime)
{
_direction = direction;
_passedTime = passedTime;
}
After initializing with the specified passed time and direction all that's left to accelerate the projectile is a move method. The provided example is a very basic implementation of a move method, while also applying the acceleration.
If there is passed time to apply then additional delta is added using the _passedTimeDelta_ variable.
The percentage applied when assigning the _step_ variable decides how fast your projectile will catch up to the predicted value. In this code I am using 8% of the passed time per Move call. Higher values will result in the projectile catching up faster.
Copy
///
/// Move the projectile each frame. This would be called from Update.
///
private void Move()
{
// Frame delta, nothing unusual here.
float delta = Time.deltaTime;
// See if to add on additional delta to consume passed time.
float passedTimeDelta = 0f;
if (_passedTime > 0f)
{
/* Rather than use a flat catch up rate the
* extra delta will be based on how much passed time
* remains. This means the projectile will accelerate
* faster at the beginning and slower at the end.
* If a flat rate was used then the projectile
* would accelerate at a constant rate, then abruptly
* change to normal move rate. This is similar to using
* a smooth damp. */
/* Apply 8% of the step per frame. You can adjust
* this number to whatever feels good. */
float step = (_passedTime * 0.08f);
_passedTime -= step;
/* If the remaining time is less than half a delta then
* just append it onto the step. The change won't be noticeable. */
if (_passedTime <= (delta / 2f))
{
step += _passedTime;
_passedTime = 0f;
}
passedTimeDelta = step;
}
// Move the projectile using moverate, delta, and passed time delta.
transform.position += _direction * (MOVE_RATE * (delta + passedTimeDelta));
}
Very last, keep in mind these projectiles are fired locally and are not networked. Because of this you may want to perform different actions based on if client or server. The code below demonstrates what a collision event might look like.
Copy
///
/// Handles collision events.
///
private void OnCollisionEnter(Collision collision)
{
/* These projectiles are instantiated locally, as in,
* they are not networked. Because of this there is a very
* small chance the occasional projectile may not align with
* 100% accuracy. But, the differences are generally
* insignifcant and will not affect gameplay. */
// If client show visual effects, play impact audio.
if (InstanceFinder.IsClient)
{
// Show VFX.
// Play Audio.
}
// If server check to damage hit objects.
if (InstanceFinder.IsServer)
{
PlayerShip ps = collision.gameObject.GetComponent();
/* If a player ship was hit then remove 50 health.
* The health value can be synchronized however you like,
* such as a syncvar. */
if (ps != null)
ps.Health -= 50f;
}
// Destroy projectile (probably pool it instead).
Destroy(gameObject);
}
[PreviousRaycast](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/raycast)
[NextCode Stripping (Pro Feature)](https://fish-networking.gitbook.io/docs/guides/features/code-stripping)
Last updated 1 month ago
---
# Authenticator | Fish-Net: Networking Evolved
Authenticator logic can be fully customized by inheriting from the _**Authenticator**_ script, and placing your created authenticator within the [Server Manager component](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager)
. There are a few example authenticators that come installed with the FishNet package within the `FishNet/Demos/Authenticator/Scripts` directory.
[PreviousBandwidthDisplay](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay)
[NextTick Smoothers](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers)
Last updated 5 months ago
---
# ServerSpawner | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/serverspawner#server-and-host)
Description
-----------------------------------------------------------------------------------------------------------------------------
The **ServerSpawner** component is a helpful tool that you can use for optionally instantiating and spawning objects as soon as the FishNet server successfully starts running (or on your own command if preferred). This is very often used to instantiate Global Network Objects, which need to be instantiated at run-time instead of existing inside a scene directly.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/serverspawner#server-and-host-1)
Settings
----------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/serverspawner#automatically-spawn)
⚙️ **Automatically Spawn**
> This dictates whether the component will instantiate and spawn the objects as soon as the server starts, or only after you manually call `Spawn` on the **ServerSpawner** component.
>
> You can disable this if you want to manually control when these objects are spawned.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/serverspawner#network-objects)
⚙️ **Network Objects**
> This is a list of the Network Objects the component will instantiate once the server starts. The order of this list is respected when instantiating the objects, and the component will attempt to use [FishNet's object pooling](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/spawning/object-pooling)
> for the objects if they are added to the an object pool.
[PreviousPlayerSpawner](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/playerspawner)
[NextColliderRollback (Pro Feature)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback)
Last updated 1 month ago
---
# Raycast | Fish-Net: Networking Evolved
Fish-Networking [Pro](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support)
is required for raycast lag compensation. Over-time projectiles may use another approach and do not require Pro. See [Projectiles](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/projectiles)
for more information.
This feature can be setup easily in a few steps.
To begin I am entering the ColliderRollbackDemo scene included with Fish-Networking Pro. You do not need to open the scene, but if you wish to follow along visually you may.
[](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/raycast#hitboxes)
Hitboxes
-----------------------------------------------------------------------------------------------------------
In my scene is an object named EnemySetup. The screen capture below shows two boxes on the 'enemy'. One for the body, and one for the head.

Each hitbox must be on a new object. Generally speaking, the hitbox would be a child of whichever component moves. With an actual humanoid rig, you would probably place the head collider on a child beneath the neck bone.
Notice the 'hitbox' objects are children of the moving component, and only have a collider on them. You may use any collider type.

Next the ColliderRollback script must be added somewhere within your prefab or object. For the sake of simplicity I have mine on the root, with the NetworkObject.
Once added, specify each object you added as a collider within the **Collider Parents** collection.
To make things easier, place the suffix 'Hitbox' on all your hitbox objects. You can then lock the inspector on your ColliderRollback object, search Hitbox, and quickly drag all entries in at once.

You've completed all the steps required for setting up an object.
[](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/raycast#rollback-manager)
Rollback Manager
---------------------------------------------------------------------------------------------------------------------------
To utilize the lag compensation you must also add the RollbackManager script to your Networkmanager object. We have a section on the [RollbackManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/rollbackmanager-pro-feature)
component to understand what each field does. Once you review the component settings we can move onto the code.
[](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/raycast#performing-a-rollback)
Performing a rollback
-------------------------------------------------------------------------------------------------------------------------------------
The RollbackManager must know how far back in time to place colliders to obtain accurate hit results. When your client is to fire their weapon you will want to gather the current PreciseTick and include it with your Fire RPC.
Copy
[Client]
private void Fire()
{
// Use LastPacketTick to get the best tick alignment.
PreciseTick pt = base.TimeManager.GetPreciseTick(TickType.LastPacketTick);
// Call fire on the server.
ServerFire(pt);
}
[ServerRpc]
private void ServerFire(PreciseTick pt)
{
// Rollback using the precise tick sent in.
// Using Physics for 3d rollback, Physics3D for 2d rollback.
// Both physics types can be used at once.
base.RollbackManager.Rollback(pt, RollbackManager.PhysicsType.Physics, base.IsOwner);
// Perform your raycast normally.
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.forward, out hit)) { }
// Return the colliders to their proper positions.
base.RollbackManager.Return();
}
[PreviousStates](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/states)
[NextProjectiles](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/projectiles)
Last updated 1 month ago
---
# NetworkAnimator | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#description)
Description
---------------------------------------------------------------------------------------------------------------------------
FishNet's **Network Animator** is a component designed to synchronize Unity’s Animator state and parameters over the network. It supports both server-authoritative and client-authoritative modes. In client authority mode, the owner client can send animation parameter changes to the server, which then relays them to other clients.
This component does not align with our Client-Side prediction API. You may still use the NetworkAnimator with prediction but the animations likely be updated slightly before the prediction state runs.
You may place as many NetworkAnimators as you like on children or root. When an animator is not specified on the Animator field the first one on the same object is used.
Check out the API page for specific methods, and properties [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.Animating.NetworkAnimator.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#server-and-host)
Settings
----------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#animator)
⚙️ **Animator**
> This field indicates which Animator to synchronize over the network. The referenced animator can be anywhere on the object. You may also change the Animator at runtime using Network Animator API.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#synchronize-when-disabled)
⚙️ **Synchronize When Disabled**
> When enabled, this will allow the **NetworkAnimator** to synchronize changes even when the **Animator** component is disabled.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#interpolation)
⚙️ **Interpolation**
> This is how many ticks of interpolation to use. Like the [NetworkTransform](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform)
> , the animator will be this number of ticks behind before iterating data. To use tick alignment with a NetworkTransform, use the same value of interpolation as on the NetworkTransform.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#smooth-floats)
⚙️ **Smooth Floats**
> This will ensure floats are moved over time on those receiving animator updates. This is commonly left true to allow blending between animation trees.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#client-authoritative)
⚙️ **Client Authoritative**
> When this is enabled it allows the owning client to make changes to their animations locally, and those changes will be sent to the server and other clients. While disabled the server must change animations to have them sent to clients.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#send-to-owner)
⚙️ **Send To Owner**
> This will only be displayed when _**Client Authoritative**_ is false. While _**Synchronize To Owner**_ is true the server will also send animation changes to the object owner; while false the owner will not get the animation changes by the server. This can be useful if you want to run animations locally in real time on owning clients.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#synchronized-parameters-pro-feature)
⚙️ **Synchronized Parameters (pro feature)**
> These allow only specified parameters to be synchronized over the network. This can be useful if some parameters should only be used for the local client, or do not necessarily need to be networked.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator#runtime)
Runtime
-------------------------------------------------------------------------------------------------------------------
The NetworkAnimator will detect values, layer weights, and speed changes automatically, and synchronize these changes efficiently.
However, most projects also depend on using crossfade, play, and other common Animator APIs.
To synchronize these actions over the network you will simply call each desired method on your NetworkAnimator reference.
Copy
// This will perform Play on your animator, and synchronize the
// action over the network.
_myNetworkAnimator.Play(stringOrHash);
There are several more common methods in our NetworkAnimator component that you will want to use. To see all methods you're encouraged to view our [API](https://fish-networking.com/FishNet/api/api/FishNet.Component.Animating.NetworkAnimator.html)
or simply open the NetworkAnimator source file.
Here are some examples of commonly used methods.
Copy
_myNetworkAnimator.SetTriger(...)
_myNetworkAnimator.ResetTriger(...)
_myNetworkAnimator.CrossFade(...)
Other less commonly used actions are **SetController** and **SetAnimator.** You are encouraged to review the API on these when using, or even the XML when calling the method.
[PreviousNetworkTransform](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform)
[NextNetworkObserver](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer)
Last updated 1 month ago
---
# ColliderRollback (Pro Feature) | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback#description)
Description
----------------------------------------------------------------------------------------------------------------------------
This component is used for rolling back colliders on objects for the purpose of lag compensation. You can find out more about it in the dedicated guide for this feature: [Raycast](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation/raycast)
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback#settings)
Settings
----------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback#bounding-box)
⚙️ **Bounding Box**
> This configures how a bounding box is added to the object. When set to **Disabled** a bounding box will not be added. Additional settings are displayed when not set to **Disabled**.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback#physics-type)
⚙️ **Physics Type**
> This is which type of physics you plan on rolling back, and determines if a Physics collider is added, or Physics2D collider.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback#bounding-box-size)
⚙️ **Bounding Box Size**
> This determines how large of a bounding box to add. Typically a value three times larger than the world space of your object is sufficient. For example, if your object is a Vector3.one cube, this value would Vector3(3f, 3f, 3f). If an object is exceptionally fast moving consider making this larger.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback#collider-parents)
⚙️ **Collider Parents**
> These are transforms you wish to send back in time when performing a rollback. For best results put your hitboxes on their own transform, which is a child of the object the hitbox is for. A setup example is rovided as a demo within `FishNet\Demos\ColliderRollback`.
[PreviousServerSpawner](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/serverspawner)
[NextPrefabs](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/prefabs)
Last updated 1 month ago
---
# OfflineRigidbody | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/offlinerigidbody#description)
Description
---------------------------------------------------------------------------------------------------------------------------------------
When using predictions, especially physics prediction, the client will often re-simulate physics to make corrections. You generally want to add an OfflineRigidbody component to prevent non-networked objects from simulating multiple times during a correction.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/offlinerigidbody#settings)
Settings
---------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/offlinerigidbody#rigidbody-type)
⚙️ **Rigidbody Type**
> This is to specify if the offline object uses a rigidbody3d, or 2d.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/offlinerigidbody#get-in-children)
⚙️ **Get In Children**
> This setting should be enabled if you have child rigidbodies. Keeping this disabled when child rigidbodies are not present will save a very small amount of performance.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/offlinerigidbody#combining-smoothers)
Combining Smoothers
-------------------------------------------------------------------------------------------------------------------------------------------------------
There is a fair chance you will want to have the graphical object on your rigidbodies smoothed between ticks. There are a variety of components to accomplish this; see them on the [Tick Smoothers](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers)
page.
[PreviousNetworkTrigger2D](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger2d)
[NextPredictedOwner](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedowner)
Last updated 1 month ago
---
# SceneCondition | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/scenecondition#server-and-host)
Description
--------------------------------------------------------------------------------------------------------------------------------------------------------
The **Scene Condition** evaluates to true if the client shares any scenes with the object. This is arguably the most important observer condition, and it is the only one that is added by default to the [example NetworkManager prefab](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/prefabs/networkmanager)
. This condition is important because it helps avoid serious de-syncs that would happen if the server tried to tell clients about objects from a scene they haven't yet loaded.

[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/scenecondition#server-and-host-1)
Settings
-------------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/scenecondition#add-order)
⚙️ **Add Order**
> This controls the order in which this observer condition will be evaluated on an object.
>
> This can be very useful when having observer conditions that are more computationally complex than others, as it allows you to choose the order in which they will be evaluated. Timed conditions are always evaluated after non-timed conditions.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/scenecondition#is-constant)
⚙️ **Is Constant**
> Is used to declare whether the condition's settings or data will remain unchanged at runtime. Its purpose is to optimize performance by avoiding unnecessary updates or recalculations for conditions that do not change during execution. It is currently not implemented, but is available for future use and can already be set.
[PreviousOwnerOnlyCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/owneronlycondition)
[NextSpawnablePrefabs](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs)
Last updated 1 month ago
---
# NetworkTrigger2D | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger2d#description)
Description
--------------------------------------------------------------------------------------------------------------------------------------------------------
This component is used for receiving trigger events for prediction enabled objects for 2D Colliders. It is very much equivalent to a Collider's `OnTriggerEnter`, `OnTriggerExit`, and `OnTriggerStay` messages, except that to receive these you would add this component to your game object and subscribe to its public events.
Check out this API page [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.Prediction.NetworkCollider2D.html)
for the specific details.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger2d#settings)
Settings
--------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger2d#maximum-simultaneous-hits)
⚙️ **Maximum Simultaneous Hits**
> This is the maximum number of simultaneous hits that the component will check for. You can use this field to customize how many overlapping colliders the component should be able to detect. It should be noted that having too large of a value will decrease its performance. In most cases, the default value of 16 suffices.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger2d#history-duration)
⚙️ **History Duration**
> This determines how long collision history is retained. Lower values optimize memory usage slightly, but may lead to the collision records becoming out of sync on clients with excessively high latency.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger2d#additional-size)
⚙️ **Additional Size**
> The **Additional Size** determines the distance in units by which collision traces are extended. This extension helps prevent missed overlaps when colliders do not intersect sufficiently. Depending on the scale used in your game you may want to raise or lower this value.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger2d#layers)
⚙️ **Layers**
> These are the Layers to detect collisions on. This is used when value is not set as **Nothing**.
[PreviousNetworkTrigger](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger)
[NextOfflineRigidbody](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/offlinerigidbody)
Last updated 1 month ago
---
# NetworkTransform | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#server-and-host)
Description
---------------------------------------------------------------------------------------------------------------------------------
NetworkTransform is FishNet’s robust solution for syncing transform data (position, rotation, scale) over the network, supporting both server and client authority, smooth movement, and scene hierarchy handling. It is essential for multiplayer games where objects need to appear at the same place for all players.
You may place as many NetworkTransforms as you like on children. A single NetworkTransform will synchronize the object it is directly on.
Check out the [Moving Your Player Around](https://fish-networking.gitbook.io/docs/tutorials/getting-started/moving-your-player-around)
guide for an example of using the **Network Transform** to sync basic player movement.
Check out the API page for more specific methods, properties, and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.Transforming.NetworkTransform.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#server-and-host-1)
Settings
--------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#component-configuration)
⚙️ **Component Configuration**
> The **Component Configuration** attempts to automatically configure components used to move your object. For example, if you were to use a CharacterController you could change this setting to **CharacterController** and the CharacterController will be automatically configured based on other **NetworkTransform** settings. This feature does not change owner smoothing; for example, if you are using a client authoritative rigidbody setting the Component Configuration to rigidbody will not interpolate the rigidbody for owner, but rather configures the rigidbody on non-owners and server so the NetworkTransform can smooth it properly.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#synchronize-parents)
⚙️ **Synchronize Parents**
> When enabled, this will automatically synchronize which objects the transform is attached to.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#packing)
⚙️ **Packing**
> These settings determine the level of packing for each transform property. In some instances you may want more precision; **Unpacked** will give you the most precision**, Packed** will give you the least amount of precision, and **Packed Less** will give you an in-between amount. Less packing equals more precision at the cost of more network bandwidth used.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#interpolation)
⚙️ Interpolation
> This is how long of a buffer to create when replicating the transform. Larger interpolation values will reduce the chance of jitter should there be network lag in favor of the transform being further in the past.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#extrapolation-pro-feature)
⚙️ **Extrapolation (pro feature)**
> This is how long the transform will try to predict movement when new data is expected, but does not arrive. Using a low interpolation value mixed with extrapolation is a great way to get responsive movement without showing network latency.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#enable-teleport)
⚙️ **Enable Teleport**
> This option allows the **NetworkTransform** to teleport the object instead of smoothly moving it over several frames once the distance moved in an instance is greater than the set threshold.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#teleport-threshold)
⚙️ **Teleport Threshold**
> This is how far the transform must travel in a single update to cause a teleport rather than smoothing. Using a value of 0f will teleport every frame and will result in no smoothing at all.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#client-authoritative)
⚙️ **Client Authoritative**
> as true allows the owning client to make changes to their transform locally, and those changes will be sent to the server and other clients. While false the server must change transforms to have them sent to clients.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#send-interval)
⚙️ **Send Interval**
> determines at most how often in ticks the NetworkTransform may send. A value of 1 indicates the NetworkTransform can send every tick, if there is change. A value of 5 would mean that the NetworkTransform will send at most every 5 ticks, even if there is change between each tick. For example: if using an interval of 5 and the transform changes and sends on tick 100, then changes on 101, the next update will not send until 105.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform#synchronize-position-rotation-scale)
⚙️ **Synchronize Position, Rotation, Scale**
> The **Synchronize** settings let you choose which properties to synchronize. Only changed values will send over the network, but if you do not want a value to update at all you can turn off synchronization for a transform property. The **Snapping** settings will allow the transform to snap axes rather than smooth them over time. This feature is commonly used for 2D games, such if you wanted to flip the Y axis on rotation immediately.
[PreviousNetworkBehaviour](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-behaviour-components)
[NextNetworkAnimator](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator)
Last updated 1 month ago
---
# Yak (Pro Feature) | Fish-Net: Networking Evolved
Yak is part of Fish-Networking Pro features.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/yak-pro-feature#description)
Description
---------------------------------------------------------------------------------------------------------------------------
An offline transport that runs off your multiplayer code. No local or remote connections are made using this transport.
Besides being an offline transport, Yak API behaves exactly as our many other transports. In result, you do not need to change any of your code to take advantage of Yak.
To support offline play and online play you will want to consider using [Multipass](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/multipass)
with Yak and an online transport of your choice.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/yak-pro-feature#compatibility)
Compatibility
-------------------------------------------------------------------------------------------------------------------------------
System
Supported?
All Platforms
Fully Supported
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/yak-pro-feature#how-to-install)
How to install
---------------------------------------------------------------------------------------------------------------------------------
Yak is part of FishNet Pro! So you must have purchased pro. See how to purchase and download FishNet Pro [here](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support)
. After Installing FishNet Pro, just add Yak to your Transport manager, most likely you will be adding Yak onto Multipass like mentioned in the General Section above.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/yak-pro-feature#settings)
Settings
---------------------------------------------------------------------------------------------------------------------
No settings needed to be configured with Yak.
[PreviousMultipass](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/multipass)
[NextBayou](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou)
Last updated 1 month ago
---
# FishyUnityTransport | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyunitytransport#general)
General
-----------------------------------------------------------------------------------------------------------------------
A transport to utilize Unity's Official Transport with FishNet. Supports both Unity Transport 1.0 and Unity Transport 2.0 Using **FishyUnityTransport** also allows you to utilize some of [Unity's Multiplayer Services](https://unity.com/solutions/multiplayer)
, like [Relay](https://unity.com/products/relay)
!
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyunitytransport#compatibility)
Compatibility
-----------------------------------------------------------------------------------------------------------------------------------
System
Supported?
Windows
Fully Supported
MacOS
Fully Supported
Linux
Fully Supported
Web
Fully Supported
IOS
Fully Supported
Android
Fully Supported
Xbox
Fully Supported
PlayStation
Fully Supported
Nintendo
Fully Supported
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyunitytransport#how-to-install)
How to install
-------------------------------------------------------------------------------------------------------------------------------------
For installation instructions and usage please visit the official GitHub site.
Main: [https://github.com/ooonush/FishyUnityTransport](https://github.com/ooonush/FishyUnityTransport)
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyunitytransport#component-settings)
Component settings
---------------------------------------------------------------------------------------------------------------------------------------------
Settings marked in **Yellow** are only supported on Unity Transport 2.0!
* **Protocol Type:** Configure whether the transport is done via direct connection or over Unity Relay.
* **Use Web Sockets:** Per default the client/server will communicate over UDP. Set to true to communicate with WebSocket.
* **Use Encryption:** Per default the client/server communication will not be encrypted. Select true to enable DTLS for UDP and TLS for Websocket
* **Max Packet Queue Size:** The maximum amount of packets that can be in the internal send/receive queues. Basically this is how many packets can be sent/received in a single update/frame.
* **Max Payload Size:** The maximum size of an unreliable payload that can be handled by the transport.
* **Heartbeat Timeout (ms):** Timeout in milliseconds after which a heartbeat is sent if there is no activity.
* **Connect Timeout (ms):** Timeout in milliseconds indicating how long we will wait until we send a new connection attempt.
* **Max Connect Attempts:** The maximum amount of connection attempts we will try before disconnecting.
* **Disconnect Timout (ms):** Inactivity timeout after which a connection will be disconnected. The connection needs to receive data from the connected endpoint within this timeout. Note that with heartbeats enabled, simply not sending any data will not be enough to trigger this timeout (since heartbeats count as connection events
* **Connection Data:**
* **Address:** IP address of the server (address to which clients will connect to)
* **Port:** UDP port of the server.
* **Server Listen Address:** IP address the server will listen on. If not provided, will use localhost.
* **Maximum Clients**: The Number of Clients allowed to connect to the FishNet server.
[PreviousFishyWebRTC](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishywebrtc)
[NextFishySteamworks (Steam)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishysteamworks)
Last updated 1 month ago
---
# PredictedOwner | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedowner#description)
Description
-------------------------------------------------------------------------------------------------------------------------------------
The **PredictedOwner** allows clients to immediately simulate ownership on an object without waiting for the server's response. This overcomes delays from client latency, allowing for a seamless transition of ownership. Placing this component on an object enables this feature for that network object.
A client can use the [`TakeOwnership`](https://fish-networking.com/FishNet/api/api/FishNet.Component.Ownership.PredictedOwner.html#FishNet_Component_Ownership_PredictedOwner_TakeOwnership_System_Boolean_)
method to anticipatorily claim ownership of an object. You can also access the [`PreviousOwner`](https://fish-networking.com/FishNet/api/api/FishNet.Component.Ownership.PredictedOwner.html#FishNet_Component_Ownership_PredictedOwner_PreviousOwner)
of the object and by inheriting from this component you can add checks to the server to decide whether to accept the ownership change or reject it. This can be done by overriding the [`OnTakeOwnership`](https://fish-networking.com/FishNet/api/api/FishNet.Component.Ownership.PredictedOwner.html#FishNet_Component_Ownership_PredictedOwner_OnTakeOwnership_FishNet_Connection_NetworkConnection_System_Boolean_)
method and not handing over the ownership for whatever reason you may have.
Check out its full API page for more specific methods and properties [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.Ownership.PredictedOwner.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedowner#settings)
Settings
-------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedowner#allow-take-ownership)
⚙️ **Allow Take Ownership**
> This enables or disables the functionality of this component, and can be set at run-time from the server with this method: [`SetAllowTakeOwnership`](https://fish-networking.com/FishNet/api/api/FishNet.Component.Ownership.PredictedOwner.html#FishNet_Component_Ownership_PredictedOwner_SetAllowTakeOwnership_System_Boolean_)
> .
[PreviousOfflineRigidbody](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/offlinerigidbody)
[NextPredictedSpawn](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedspawn)
Last updated 1 month ago
---
# DefaultScene | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/defaultscene#description)
Description
------------------------------------------------------------------------------------------------------------------------
This component will automatically change between online and offline scenes depending on server and client connective state. When a connection is started the online scene is loaded, and when disconnected the offline scene is loaded. This component must be placed on or beneath your [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
.
Check out the API page for specific methods [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.Scenes.DefaultScene.html)
.
For this component to work, both the online scene and the offline scene must be selected in the inspector, and they must not be the same scene.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/defaultscene#settings)
Settings
------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/defaultscene#enable-global-scenes)
⚙️ **Enable Global Scenes**
> This will load the scenes as global when enabled, or as connection when not. For more information on the differences see [Scene Loading](https://fish-networking.gitbook.io/docs/guides/features/scene-management/loading-scenes)
> .
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/defaultscene#start-in-offline)
⚙️ **Start In Offline**
> This will load the server and clients into the offline scene when the game starts.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/defaultscene#offline-scene)
⚙️ **Offline Scene**
> This is the scene to load when offline.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/defaultscene#online-scene)
⚙️ **Online Scene**
> This is the scene to load when online.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/defaultscene#replace-scenes)
⚙️ **Replace Scenes**
> This can be set to replace all loaded scenes, or just online scenes with the Online or Offline scene. For more information see loading [Scene Loading - replacing scenes](https://fish-networking.gitbook.io/docs/guides/features/scene-management/loading-scenes)
> .
[PreviousNetworkObserver](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer)
[NextPlayerSpawner](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/playerspawner)
Last updated 1 month ago
---
# PingDisplay | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/pingdisplay#description)
Description
---------------------------------------------------------------------------------------------------------------------------------
Often times you may want to display the local client's ping while developing your game, this can easily be done with the **PingDisplay** component. This component is commonly added to the [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
object, but that is not a requirement.

Example of the PingDisplay component in-use
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/pingdisplay#settings)
Settings
---------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/pingdisplay#color)
⚙️ **Color**
> This is which color to use for the displayed text.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/pingdisplay#placement)
⚙️ **Placement**
> The P**lacement** indicates in which part of the screen to display the client's ping.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/pingdisplay#hide-tick-rate)
⚙️ **Hide Tick Rate**
> This option will remove tick rate latency from the ping results otherwise the displayed ping will include the delay caused by the server's tick rate.
[PreviousUtilities](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities)
[NextBandwidthDisplay](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay)
Last updated 1 month ago
---
# PlayerSpawner | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/playerspawner#server-and-host)
Description
-----------------------------------------------------------------------------------------------------------------------------
The **PlayerSpawner** component in FishNet is responsible for spawning player objects for clients when they connect to the server. You set the player prefab using the inspector or via the `SetPlayerPrefab` method. You can also define an array of spawn points (Transforms) for players (the **Spawns** array). If no spawn points are set, the prefab’s own position and rotation are used. You also have access to the `OnSpawned` event that fires on the server when a player is spawned.
Check out the API page for specific fields and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.Spawning.PlayerSpawner.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/playerspawner#server-and-host-1)
Settings
----------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/playerspawner#player-prefab)
⚙️ **Player Prefab**
> This is used to select the prefab this component will instantiate for clients when they connect to the server.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/playerspawner#add-to-default-scene)
⚙️ **Add to Default Scene**
> This is used to add a client to the active scene when no global scenes are specified through the [FishNet SceneManager](https://fish-networking.gitbook.io/docs/guides/features/scene-management)
> . This is important because FishNet doesn't force a client to start in the same scene as the server, so FishNet needs to be told if a client should observe a specific scene and receive information about the Network Objects in that scene.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/playerspawner#spawns)
⚙️ **Spawns**
> This is a list of GameObject Transforms that the **PlayerSpawner** will use as locations to spawn the players at. It will use them in order, one after another, looping once it reaches the final one. If none are given, then it will use the prefab's base position.
[PreviousDefaultScene](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/defaultscene)
[NextServerSpawner](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/serverspawner)
Last updated 1 month ago
---
# FishySteamworks (Steam) | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishysteamworks#general)
General
-------------------------------------------------------------------------------------------------------------------
FishySteamworks is FizzySteamworks reformed. FishySteamworks has significant performance improvements and has been made to fully support [Toolkit for Steamworks SDK](https://kb.heathen.group/toolkit-for-steamworks-sdk/steamworks)
by _Heathen Engineering._
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishysteamworks#server-and-host)
Compatibility
---------------------------------------------------------------------------------------------------------------------------------
System
Supported?
Windows
Fully Supported
MacOS
Fully Supported
Linux
Fully Supported
Web
Not Supported
IOS
Not Supported
Android
Not Supported
Xbox
Not Supported
PlayStation
Not Supported
Nintendo
Not Supported
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishysteamworks#how-to-install)
How to install
---------------------------------------------------------------------------------------------------------------------------------
Github: [https://github.com/FirstGearGames/FishySteamworks/](https://github.com/FirstGearGames/FishySteamworks/)
Import the package from Github above into your Unity FishNet project, and add the "FishySteamworks" Component to your [Transport Manager.](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager)
_FishySteamworks is dependent upon_ [Steamworks.NET](https://steamworks.github.io/)
. An [installation article](https://kb.heathenengineering.com/assets/steamworks/installation)
for Steamworks.NET has kindly been provided by _Heathen Engineering__**.**_
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishysteamworks#server-and-host-1)
Component settings
----------------------------------------------------------------------------------------------------------------------------------------
* **Steam App Id:** is the Id for your steam application. 480 is the default, which is often used as a test App Id.
* **Server Bind Address:** Which IP the server will bind/listen on. The default value is empty.
* **Port:** Indicates which port the server will listen on.
* **Peer To Peer:** Will allow clients to act as [host](https://fish-networking.gitbook.io/docs/guides/high-level-overview/terminology/server-client-host#server-and-host-2)
when running your project. IP addresses are **NOT** revealed.
* **Maximum Clients:** is how many players can be connected to the server at once.
* **Client Address:** is the IP of the server, which clients connect to. Empty is the default value for local testing.
[PreviousFishyUnityTransport](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyunitytransport)
[NextFishyEOS (Epic Online Services)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyeos-epic-online-services)
Last updated 1 month ago
---
# Multipass | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/multipass#description)
Description
---------------------------------------------------------------------------------------------------------------------
**Multipass** is a pass-through transport that allows multiple transports to run on the server at once. For example, you may want to run Tugboat for your desktop or mobile users, and Bayou for your web users. With **Multipass** a single server build can run both, joining players from both together in the same game.
For usage see the [guide](https://fish-networking.gitbook.io/docs/guides/features/transports/multipass#setup)
.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/multipass#compatibility)
Compatibility
-------------------------------------------------------------------------------------------------------------------------
System
Supported?
All Platforms
Fully Supported
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/multipass#how-to-install)
How to install
---------------------------------------------------------------------------------------------------------------------------
Multipass comes with FishNet by default! No extra downloads needed. Just add Multipass to your [Transport Manager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager)
and follow the usage guide mentioned in General above.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/multipass#settings)
Settings
---------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/multipass#global-server-actions)
⚙️ **Global Server Actions**
> **W**hile enabled, this will perform server actions such as start or stop server on all transports.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/multipass#transports)
⚙️ **Transports**
> A collection of [transports](https://fish-networking.gitbook.io/docs/guides/features/transports)
> you wish **Multipass** to support.
[PreviousTugboat](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat)
[NextYak (Pro Feature)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/yak-pro-feature)
Last updated 1 month ago
---
# FishyFacepunch (Steam) | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyfacepunch-steam#general)
General
------------------------------------------------------------------------------------------------------------------------
FishyFacepunch is a transport to interface with Steam using Facepunch.Steamworks API. You will need FishyFacepunch to be the transport layer, and you will need FacePunch.Steamworks, which is a subjectively simpler wrapper for the Steamworks.Net API. See the How to Install section to setup the Transport and FacePunch.Steamworks.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyfacepunch-steam#compatibility)
Compatibility
------------------------------------------------------------------------------------------------------------------------------------
System
Supported?
Windows
Fully Supported
MacOS
Fully Supported
Linux
Fully Supported
Web
Not Supported
IOS
Not Supported
Android
Not Supported
Xbox
Not Supported
PlayStation
Not Supported
Nintendo
Not Supported
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyfacepunch-steam#how-to-install)
How to install
--------------------------------------------------------------------------------------------------------------------------------------
To install visit [https://github.com/FirstGearGames/FishyFacepunch](https://github.com/FirstGearGames/FishyFacepunch)
and follow the Setup instructions.
Note that this transport requires Facepunch.Steamworks to be installed separately, as well as .Net 4x or greater. Links to install these should be on the GitHub as well.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyfacepunch-steam#component-settings)
Component settings
----------------------------------------------------------------------------------------------------------------------------------------------

Default settings
* **Steam App ID:** The App ID assigned to your game when registered with Steam. The default is 480 which is Steam's testing game (SpaceWar).
####
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyfacepunch-steam#server)
Server
* **Server Bind Address:** Used if you want to manually Bind a Steam ID to the server.
* **Port:** The port you want the server to be binded to. Default is 27015
* **Maximum Clients:** The maximum amount of clients you would like to connect to the server. Default is 16.
####
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyfacepunch-steam#client)
Client
* **ClientAddress:** The Steam ID of the server you are connecting to. The Servers Steam ID if its standalone, or the Hosts Client Steam ID if the server is a host.
* **Timeout (Seconds):** The amount of time allowed to establish a connection, in seconds.
[PreviousFishyEOS (Epic Online Services)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyeos-epic-online-services)
[NextFishyRealtime (Photon)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyrealtime)
Last updated 1 month ago
---
# Bayou | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou#description)
Description
-----------------------------------------------------------------------------------------------------------------
Bayou is the transport you are looking for when you want communication on WebGL! It is an updated and repurposed version of the "SimpleWebTransport" That was originally designed for Mirror Networking.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou#compatibility)
Compatibility
---------------------------------------------------------------------------------------------------------------------
System
Supported?
Windows
Fully Supported
MacOS
Fully Supported
Linux
Fully Supported
Web
Fully Supported
IOS
Fully Supported
Android
Fully Supported
Xbox
Fully Supported
PlayStation
Not Supported
Nintendo
Not Supported
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou#how-to-install)
How to Install
-----------------------------------------------------------------------------------------------------------------------
Bayou does not come with FishNet by default, you must download it from GitHub. You can find the latest version at the link below!
[https://github.com/FirstGearGames/Bayou/](https://github.com/FirstGearGames/Bayou/)
Once Downloaded and Imported into Unity with FishNet. You should add the component to your Network manager, and Assign the "Transport" variable on the Transport Manager to Tugboat.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou#settings)
Settings
-----------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou#use-wss)
⚙️ **Use WSS**
> When enabled, Bayou will use Secure WebSockets instead of normal WebSockets.
>
> When this is enabled the following options will be available:
>
> * **Enabled**: Turns on/off Requiring SSL Certificate.
>
> * **Certificate Path**: File Path for the certificate
>
> * **Certificate Password**: Password for certificate
>
> * **SSL Protocol**: The protocol you would like to use for encryption.
>
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou#mtu)
⚙️ **MTU**
> Maximum Transmission Unity for the unreliable channel (in bytes)
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou#port)
⚙️ **Port**
> The port you want to bind the server to. Default port is 7770.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou#maximum-clients)
⚙️ **Maximum Clients**
> The maximum amount of clients allowed to connect to the server. Default is 2000 clients.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/bayou#client-address)
⚙️ **Client Address**
> The Address the client should use to connect to the server.
[PreviousYak (Pro Feature)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/yak-pro-feature)
[NextFishyWebRTC](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishywebrtc)
Last updated 1 month ago
---
# FishyRealtime (Photon) | Fish-Net: Networking Evolved
While the FishyRealtime Transport is free under MIT license, Exit Game's Photon Realtime is subject to their own service charges and license.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyrealtime#general)
General
-----------------------------------------------------------------------------------------------------------------
FishyRealtime is a transport that allows the Photon Realtime service from the company **Exit Games** to work with FishNet!
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyrealtime#compatibility)
Compatibility
-----------------------------------------------------------------------------------------------------------------------------
System
Supported?
Windows
Fully Supported
MacOS
Fully Supported
IOS
Fully Supported
Android
Fully Supported
Linux
Fully Supported
Xbox
Fully Supported
PlayStation
Fully Supported
Nintendo
Fully Supported
Web
Not Supported
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyrealtime#how-to-install)
How to install
-------------------------------------------------------------------------------------------------------------------------------
Please visit the official GitHub link for Installation and Usage instructions.
Main: [https://github.com/REIO7200/FishyRealtime](https://github.com/REIO7200/FishyRealtime)
To reiterate, This transport does depend on installing the Photon Realtime SDK Separately.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyrealtime#component-settings)
Component settings
---------------------------------------------------------------------------------------------------------------------------------------
* **Photon APP ID:** The app id of the Photon Realtime product.
* **App Version:** The version of the product(Game), only clients with the same version can connect to each other.
####
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyrealtime#default-room-options)
Default room options
* **Max Players:** Default max players.
* **Is Visable:** Whether Room is Visiable to Public Room List.
* **Is Open:** Whether the room is public or private.
* **Connection Protocol:** Connection Type.
* **Region:** The Region the Server is hosted on.
[PreviousFishyFacepunch (Steam)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyfacepunch-steam)
[NextConfiguration and Tools](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools)
Last updated 1 month ago
---
# NetworkTrigger | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger#description)
Description
------------------------------------------------------------------------------------------------------------------------------------------------------
This component is used for receiving trigger events for prediction enabled objects for 2D Colliders. It is very much equivalent to a Collider's `OnTriggerEnter`, `OnTriggerExit`, and `OnTriggerStay` messages, except that to receive these you would add this component to your game object and subscribe to its public events.
Check out this API page [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.Prediction.NetworkCollider.html)
for the specific details.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger#settings)
Settings
------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger#maximum-simultaneous-hits)
⚙️ **Maximum Simultaneous Hits**
> This is the maximum number of simultaneous hits that the component will check for. You can use this field to customize how many overlapping colliders the component should be able to detect. It should be noted that having too large of a value will decrease its performance. In most cases, the default value of 16 suffices.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger#additional-size)
⚙️ **Additional Size**
> The **Additional Size** determines the distance in units by which collision traces are extended. This extension helps prevent missed overlaps when colliders do not intersect sufficiently. Depending on the scale used in your game you may want to raise or lower this value.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger#layers)
⚙️ **Layers**
> These are the Layers to detect collisions on. This is used when value is not set as **Nothing**.
[PreviousNetworkCollision2D](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision2d)
[NextNetworkTrigger2D](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger2d)
Last updated 1 month ago
---
# Managers | Fish-Net: Networking Evolved
The [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
will automatically add the needed manager components to itself at run-time, if they aren't already added. You can add them yourself to customize their settings in the editor.
[PreviousComponents](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components)
[NextNetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
Last updated 5 months ago
---
# Tick Smoothers | Fish-Net: Networking Evolved
You may put multiple tick smoother components beneath an object if you have several different graphical pieces in your hierarchy you want smoothed. A good example of this is a vehicle where the wheels move independently of the vehicle body.
The smoother will be placed on the graphical object you wish to smooth; this object must not be the same as the target, nor higher in the hierarchy of the target; being a child of the target is fine.
Tick Smoothers are only used by clients. These components will not function when only the server is started.
[PreviousAuthenticator](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/authenticator)
[NextNetworkTickSmoother](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/networkticksmoother)
Last updated 9 months ago
---
# NetworkObserver | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer#conditions)
Description
---------------------------------------------------------------------------------------------------------------------------
The **NetworkObserver** uses conditions to determine if a client qualifies to be an observer of an object; any number of conditions may be used and a client will be considered an observer of the object if he passes all active conditions. The NetworkObserver component can be used to override the [ObserverManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager)
, or add additional conditions onto the object to which the NetworkObserver is added.
When adding this component manually, be careful not to unintentionally override the default scene observer condition of the object by using the **Ignore Manager** override type setting.
This component will be added to a network object at run-time if it doesn't already exist.
Check out the API page for specific methods, and properties [here](https://fish-networking.com/FishNet/api/api/FishNet.Observing.NetworkObserver.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer#conditions-1)
Conditions
----------------------------------------------------------------------------------------------------------------------------
There are [several included conditions](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions)
, which may be used together. ObserverCondition may also be inherited from [to make your own conditions](https://fish-networking.gitbook.io/docs/guides/features/observers/custom-conditions)
. When all conditions are true, the object will become visible to the client.
Each condition must be created as a scriptable object, and dropped into the Network Observer component.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer#component-settings)
Settings
--------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer#override-type)
⚙️ **Override Type**
> This is used to change how the **NetworkObserver** component uses the [ObserverManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager)
> settings. _Add Missing_ will add any conditions from the ObserverManager which are not already on the NetworkObserver. _UseManager_ replaces conditions with those from the manager. _Ignore Manager_ will keep the NetworkObserver conditions, ignoring the ObserverManager entirely.
>
> _Add Missing_ is usually the recommended option.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer#update-host-visibility)
⚙️ **Update Host Visibility**
> This will change the visibility of renderers for the host client when server objects are not visible to the client. If you wish to enable and disable other aspects during a visibility change consider using the [`NetworkObject.OnHostVisibilityUpdated`](https://fish-networking.com/FishNet/api/api/FishNet.Object.NetworkObject.html#FishNet_Object_NetworkObject_OnHostVisibilityUpdated)
> event.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer#observer-conditions)
⚙️ **Observer Conditions**
> This is a list of which observer conditions to use. You can find out more about the specific ones here: [ObserverConditions](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions)
[PreviousNetworkAnimator](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/networkanimator)
[NextDefaultScene](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/defaultscene)
Last updated 1 month ago
---
# FishyEOS (Epic Online Services) | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyeos-epic-online-services#general)
General
---------------------------------------------------------------------------------------------------------------------------------
EOS transport allows you to utilize Epic's services such as match making and relay. Fishy EOS uses the PlayEveryware EOS Plugin for Unity SDK, which is a wrapper API/SDK for developers using C# and Unity to take advantage of Epics Online Services API.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyeos-epic-online-services#compatibility)
Compatibility
---------------------------------------------------------------------------------------------------------------------------------------------
System
Supported?
Epic Overlay Support?
Windows
Supported
Yes
MacOS
Supported
No
Linux
Supported
No
Web
Not Supported
No
IOS
Supported
No
Android
Supported
No
Xbox
In Preview
Unknown
PlayStation
In Preview
Unknown
Nintendo
In Preview
Unknown
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyeos-epic-online-services#how-to-install)
How to install
-----------------------------------------------------------------------------------------------------------------------------------------------
Please visit the GitHub locations for official installation and usage instructions.
Main: [https://github.com/ETdoFresh/FishyEOS](https://github.com/ETdoFresh/FishyEOS)
Fork: [https://github.com/FirstGearGames/FishyEOS](https://github.com/FirstGearGames/FishyEOS)
.
Remember that this transport requires a separate installation of the PlayEveryware EOS for Unity SDK. Installation for that should also be apart of the GitHub Links above.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyeos-epic-online-services#component-settings)
Component settings
-------------------------------------------------------------------------------------------------------------------------------------------------------
* Maximum Clients: Maximum number of players which may be connected at once
####
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyeos-epic-online-services#eos)
EOS
* Socket Name: Socket ID \[Must be the same on all clients and server\]
* Remote Server Product User ID: Server Product User ID. Must be set for remote clients.
* Auto Authenticate: Automatically Authenticate/Login to EOS Connect when starting server or client.
* Auto Connect Data: All the data necessary to login to EOS and connect to a remote peer.
* Login Credential Type:
* ID:
* Token:
* Display Name:
* Automatically Create Device ID:
* Auth Scope Flags:
* Timeout:
[PreviousFishySteamworks (Steam)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishysteamworks)
[NextFishyFacepunch (Steam)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/fishyfacepunch-steam)
Last updated 1 month ago
---
# PredictedSpawn | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedspawn#description)
Description
-------------------------------------------------------------------------------------------------------------------------------------
Adding this component to a [NetworkObject](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/networkobjects)
will allow you to adjust [predicted spawning](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/spawning/predicted-spawning)
settings for the object. To enable this feature you must also enable predicted spawning within the [ServerManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager)
.
The **PredictedSpawn** component allows you to inherit from it and then override any of several available virtual methods to customize and validate predicted spawns.
Check out its full API page for the specific methods [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.Ownership.PredictedSpawn.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedspawn#settings)
Settings
-------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedspawn#allow-spawning)
⚙️ **Allow Spawning**
> This allows clients to predicted spawn this object. You can change this at run-time with the [`SetAllowSpawning`](https://fish-networking.com/FishNet/api/api/FishNet.Component.Ownership.PredictedSpawn.html#FishNet_Component_Ownership_PredictedSpawn_SetAllowDespawning_System_Boolean_)
> method. Just be sure to do so on the client and server side.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedspawn#allow-despawning)
⚙️ **Allow Despawning**
> This allows clients to predicted despawn this object. You can change this at run-time with the [`SetAllowDespawning`](https://fish-networking.com/FishNet/api/api/FishNet.Component.Ownership.PredictedSpawn.html#FishNet_Component_Ownership_PredictedSpawn_SetAllowDespawning_System_Boolean_)
> method. Just be sure to do so on the client and server side.
You can implement WritePayload and ReadPayload in your classes which inherit NetworkBehaviour to send data with spawn messages. This can even be used for predicted spawns to the server, and clients!
Learn more about that here: [Spawn Payloads](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/spawning/spawn-payloads)
[PreviousPredictedOwner](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedowner)
[NextUtilities](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities)
Last updated 1 month ago
---
# NetworkTickSmoother | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/networkticksmoother#description)
Description
----------------------------------------------------------------------------------------------------------------------------------------------
The **Network Tick Smoother** is responsible for smoothing an object's transformation properties between network ticks. Its main purpose is to make movement, rotation, and scale, transitions appear fluid, even though network updates may arrive in discrete steps. The **NetworkTickSmoother** initializes its settings using [NetworkBehaviour callbacks](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#callbacks)
, and may only be placed below a [NetworkObject](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-object)
; if you need this form of smoothing for objects that aren't NetworkObjects you can use the [OfflineTickSmoother](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/offlineticksmoother)
instead.
There are several public APIs available for changing the smoother settings at runtime. An example of some are changing adaptive interpolation type, interpolation value, teleporting the smoothed object, and more.
Please review our [API](https://fish-networking.com/FishNet/api/api/FishNet.Component.Transforming.NetworkTickSmoother.html)
for all runtime settings.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/networkticksmoother#settings)
Settings
----------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/networkticksmoother#initialization-settings)
⚙️ Initialization Settings
> These are essential to the component working.
>
> * **Target Transform** is the transform you want to follow. This is commonly the root NetworkObject but may be other nested NetworkBehaviours when using multiple smoothers beneath a single NetworkObject.
>
> * **Detach On Start** when true will unparent the object which the smoother is attached, placing it as root in world space. Detach is commonly used when the smoothed object is a camera target, given cameras do not handle rollback or larger tick steps well.
>
> * **Attach On Stop** when true will reparent the graphical object when the network stop callbacks occur on the object, as detach will unparent on network start callbacks. Typically you want to reattach graphical objects. If the Target Transform is destroyed while detached the object the smoother is attached to will also destroy itself.
>
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/networkticksmoother#controller-smoothing)
⚙️ **Controller Smoothing**
> The **Controller Smoothing** settings determine how the object is smoothed for the controller of the object, which is either the owner or if the object has no owner then it is the server.
>
> * **Enable Teleport** will allow the graphical object to teleport to it's actual position – also known as the root position – if the position changes are drastic. Ideally you will not need this setting, but it's an available option should you desire to use it.
>
> * **Teleport Threshold** is shown while teleporting is enabled. If the graphical object's position is this many units away from the actual position, then the graphical object will teleport to the actual position.
>
>
> * **Adaptive Interpolation,** when not disabled, will increase the interpolation amount as the local client's latency becomes higher. Low settings of adaptive interpolation will increase the interpolation at lower amounts, while high will increases the interpolation more. When Adaptive Interpolation is disabled, a flat amount of interpolation will used at all times. Flat interpolation is often used in competitive or reaction based games to keep the interpolation consistent for all players. Flat interpolation is also necessary for accurate collider rollback, given our [collider rollback system](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation)
> needs to know the amount of interpolation a client sees to provide accurate raycast hit results. Adaptive interpolation is best used with casual games where you want the absolute smoothed experiences regardless of local client latency.
>
> * **Interpolation Value** is displayed when Adaptive Interpolation is off. This is a flat amount of interpolation that does not increase when the local client's latency does.
>
>
> * **Smoothed Properties** determines which properties of the transform will be smoothed. If smoothing is not set for a specific property then that particular value will persist in the same world space at all times. For example, if you uncheck Position from Smoothed Properties and move the root, the object which this component sits will never move in space, unless you of course move it manually.
>
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/networkticksmoother#spectator-smoothing)
⚙️ Spectator Smoothing
> The **Spectator Smoothing** settings determine how the object is smoothed for client's that are **not** the owner.
>
> * **Enable Teleport** will allow the graphical object to teleport to it's actual position – also known as the root position – if the position changes are drastic. Ideally you will not need this setting, but it's an available option should you desire to use it.
>
> * **Teleport Threshold** is shown while teleporting is enabled. If the graphical object's position is this many units away from the actual position, then the graphical object will teleport to the actual position.
>
>
> * **Adaptive Interpolation,** when not disabled, will increase the interpolation amount as the local client's latency becomes higher. Low settings of adaptive interpolation will increase the interpolation at lower amounts, while high will increases the interpolation more. When Adaptive Interpolation is disabled, a flat amount of interpolation will used at all times. Flat interpolation is often used in competitive or reaction based games to keep the interpolation consistent for all players. Flat interpolation is also necessary for accurate collider rollback, given our [collider rollback system](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation)
> needs to know the amount of interpolation a client sees to provide accurate raycast hit results. Adaptive interpolation is best used with casual games where you want the absolute smoothed experiences regardless of local client latency.
>
> * **Interpolation Value** is displayed when Adaptive Interpolation is off. This is a flat amount of interpolation that does not increase when the local client's latency does.
>
>
> * **Smoothed Properties** determines which properties of the transform will be smoothed. If smoothing is not set for a specific property then that particular value will persist in the same world space at all times. For example, if you uncheck Position from Smoothed Properties and move the root, the object which this component sits will never move in space, unless you of course move it manually.
>
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/networkticksmoother#scale-smoothing)
Scale Smoothing
------------------------------------------------------------------------------------------------------------------------------------------------------
Scale behaves a little differently when smoothed. Since nested objects use a localScale they will not change with the parent scale, and thus cannot be easily interpolated.
If you wish to smooth scale transitions then **Detach** (and optionally **Reattach**) must be enabled in the initialization settings so that the smoothed object does not have it's global (lossy) scale modified by Unity when the target transform or any higher transform has it's scale changed.
[PreviousTick Smoothers](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers)
[NextOfflineTickSmoother](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/offlineticksmoother)
Last updated 1 month ago
---
# NetworkCollision2D | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision2d#description)
Description
----------------------------------------------------------------------------------------------------------------------------------------------------------
This component is used for receiving collision events for prediction enabled objects for 2D Colliders. It is very much equivalent to a Collider's `OnCollisionEnter`, `OnCollisionExit`, and `OnCollisionStay` messages, except that to receive these you would add this component to your game object and subscribe to its public events.
Check out this API page [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.Prediction.NetworkCollider2D.html)
for the specific details.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision2d#settings)
Settings
----------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision2d#maximum-simultaneous-hits)
⚙️ **Maximum Simultaneous Hits**
> This is the maximum number of simultaneous hits that the component will check for. You can use this field to customize how many overlapping colliders the component should be able to detect. It should be noted that having too large of a value will decrease its performance. In most cases, the default value of 16 suffices.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision2d#history-duration)
⚙️ **History Duration**
> This determines how long collision history is retained. Lower values optimize memory usage slightly, but may lead to the collision records becoming out of sync on clients with excessively high latency.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision2d#additional-size)
⚙️ **Additional Size**
> The **Additional Size** determines the distance in units by which collision traces are extended. This extension helps prevent missed overlaps when colliders do not intersect sufficiently. Depending on the scale used in your game you may want to raise or lower this value.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision2d#layers)
⚙️ **Layers**
> These are the Layers to detect collisions on. This is used when value is not set as **Nothing**.
[PreviousNetworkCollision](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networkcollision)
[NextNetworkTrigger](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/network-collider/networktrigger)
Last updated 1 month ago
---
# Tugboat | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#description)
Description
-------------------------------------------------------------------------------------------------------------------
Tugboat uses [LiteNetLib](https://github.com/RevenantX/LiteNetLib)
to support reliable and unreliable messages. This is the default transport for Fish-Networking and will automatically be added to your [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
if no other [transport](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports)
has been added already. It supports a large variety of platforms, and is a good choice for many games.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#server-and-host)
Compatibility
-------------------------------------------------------------------------------------------------------------------------
System
Supported?
Windows
Fully Supported
MacOS
Fully Supported
Linux
Fully Supported
Web
Not Supported
IOS
Fully Supported
Android
Fully Supported
Xbox
Fully Supported
PlayStation
Fully Supported
Nintendo
Fully Supported
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#how-to-install)
How to install
-------------------------------------------------------------------------------------------------------------------------
Tugboat is the default transport of FishNet! Which means it comes with FishNet by default when Importing FishNet from your favorite source.
The [Transport Manager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager)
will automatically make this the default transport at runtime, if you did not add any other Transport to the Network Manager Game Object.
* * *
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#server-and-host-1)
Settings
----------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#stop-sockets-on-thread)
⚙️ Stop Sockets On Thread
> When enabled, causes the local server and client sockets to be stopped using a new thread. This option can be useful for ensuring that the socket shutdown process does not block the main thread, which may help with smoother shutdowns or prevent the application from freezing during network cleanup.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#dont-route)
⚙️ Don't Route
> Enable **Don't Route** if you want your Tugboat server or client to send data directly to the local interface, avoiding any network routing by the operating system. This is an advanced option primarily for special networking requirements.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#unreliable-mtu)
⚙️ **Unreliable MTU**
> This is the largest size an unreliable packet may be. When a single outbound data exceeds this value it is sent reliably. Smaller unreliable datas will be automatically split over multiple unreliable sends.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#reuse-address)
⚙️ **Reuse Address**
> Allows the same address and port to be used multiple times by the server. This can be useful if you wish to launch multiple builds or server instances on the same machine using the same configuration.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#ipv4-bind-address)
⚙️ I**Pv4 Bind Address**
> This is which address to bind the server to. If set and IPv4 is not available this will cause a socket error upon server start.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#enable-ipv6)
⚙️ **Enable IPv6**
> Enables IPv6 binding when available. In some cases you may want this disabled if you have an IPv6 interface you do not want used.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#ipv6-bind-address)
⚙️ **IPv6 Bind Address**
> This is which address to bind the server to. If set and IPv6 is not available this will cause a socket error upon server start.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#port)
⚙️ **Port**
> Is which port the server will listen on. This is also the port clients will connect to. In some instances you may need to change this at runtime using `TransportManager.SetPort()`.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#maximum-clients)
⚙️ **Maximum Clients**
> **Maximum Clients** is the maximum active clients allowed before the transport begins to deny connections.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#client-address)
⚙️ **Client Address**
> This is which address to connect to as a client. This is typically your server address. Localhost is set as default for local testing.
[PreviousTransports](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports)
[NextMultipass](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/multipass)
Last updated 1 month ago
---
# PredictionManager | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/predictionmanager#server-and-host)
Description
------------------------------------------------------------------------------------------------------------------------------------------
The **PredictionManager** is a core component responsible for managing the prediction system, which allows clients to predict their own actions and then reconcile (correct) their state when authoritative updates are received from the server. It allows you to tweak various global prediction settings and get certain prediction callbacks.
Check out its API page for more specific methods and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Managing.Predicting.PredictionManager.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/predictionmanager#server-and-host-1)
Settings
-----------------------------------------------------------------------------------------------------------------------------------------
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/predictionmanager#create-local-states)
⚙️ Create Local States
> When enabled this allows the client to create local reconcile states which means reconciles can be sent less frequently and provide data to use for reconciles when packets are lost.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/predictionmanager#state-interpolation)
⚙️ State **Interpolation**
> This is how many states to try and hold in a buffer before running them on clients. Larger values add resilience against network issues at the cost of running states later.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/predictionmanager#state-order)
⚙️ State **Order**
> The order in which clients run states. **Future** favors performance and does not depend upon reconciles, while **Past** favors accuracy but clients must reconcile every tick.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/predictionmanager#drop-excessive-replicates)
⚙️ **Drop Excessive Replicates**
> Toggle the setting to true to drop excessive client replicates, helping prevent attacks but risking temporary desynchronization during connectivity issues. Set to false to store up to 3 seconds of replicates, processing multiple per tick for quicker cache clearing. This approach ensures all inputs are executed but could enable speed hacking. When false, replicated data is consumed more quickly if the cache limit is exceeded.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/predictionmanager#maximum-server-replicates)
⚙️ Maximum Server Replicates
> This is shown when the **Drop Excessive Replicates** is enabled. This value indicates the maximum number of replicates which the server will cache from client before dropping old ones. Higher values will reduce the chance of dropped input when the client's connection is unstable, but will potentially add latency to the client's object both on the server and client. Generally, cached replicates will never significantly exceed Queued Inputs.
[PreviousTimeManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager)
[NextServerManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager)
Last updated 1 month ago
---
# BandwidthDisplay | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay#description)
Description
--------------------------------------------------------------------------------------------------------------------------------------
Using this component in combination with the [Statistics Manager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/statisticsmanager)
will show bandwidth being used by Fish-Networking.

Example of the BandwidthDisplay being used
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay#settings)
Settings
--------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay#color)
⚙️ **Color**
> This is which color to display results as.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay#placement)
⚙️ **Placement**
> The **Placement** is in what part of the screen to display results.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay#seconds-averaged)
⚙️ **Seconds Averaged**
> This is for the number of seconds used to gather data. Lower values will show more up to date usage per second while higher values provide a better over-all estimate.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay#show-outgoing)
⚙️ **Show Outgoing**
> When enabled, this will display the bandwidth used from data being sent. This can be changed at runtime with the [`SetShowOutgoing`](https://fish-networking.com/FishNet/api/api/FishNet.Component.Utility.BandwidthDisplay.html#FishNet_Component_Utility_BandwidthDisplay_SetShowOutgoing_System_Boolean_)
> method.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay#show-incoming)
⚙️ **Show Incoming**
> When enabled, this will display the bandwidth used from data being received. This can be changed at runtime with the [`SetShowIncoming`](https://fish-networking.com/FishNet/api/api/FishNet.Component.Utility.BandwidthDisplay.html#FishNet_Component_Utility_BandwidthDisplay_SetShowIncoming_System_Boolean_)
> method.
[PreviousPingDisplay](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/pingdisplay)
[NextAuthenticator](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/authenticator)
Last updated 1 month ago
---
# DetachableNetworkTickSmoother [Obsolete] | Fish-Net: Networking Evolved
This component is obsolete, you can use the [NetworkTickSmoother](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/networkticksmoother)
instead of this now.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#description)
Description
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
The DetachableNetworkTickSmooth will detach from parents at runtime and follow the configured follow object. Generally this is placed on an empty object beneath the parent, and you will set your camera target to this.

For use with prediction. You may follow NetworkObjectRoot if not using prediction.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#settings)
Settings
-----------------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#attach-on-stop)
⚙️ **Attach On Stop**
> This will re-attach this object to it's previous parent when the [NetworkObject](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-object)
> for this component has completed network stop callbacks.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#follow-object)
⚙️ **Follow Object**
> This is the object to follow. This is typically the graphical object for the same NetworkObject.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#interpolation)
⚙️ **Interpolation**
> The **Interpolation** is how long in ticks to smooth over. Depending on your game type and camera settings, typically 1 or 2 works well.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#enable-teleport)
⚙️ **Enable Teleport**
> This will allow this object to teleport to Follow Object's position after a distance between tick has passed.
>
> * **Teleport Threshold** is shown while teleporting is enabled. If the graphical object's position is this many units away from the actual position, then the graphical object will teleport to the actual position.
>
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#teleport-threshold)
⚙️ **Teleport Threshold**
> This is shown while [Enable Teleport](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#enable-teleport)
> is enabled. If the graphical object's position is this many units away from the actual position, then the graphical object will teleport to the actual position.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#synchronize-position)
⚙️ **Synchronize Position**
> When enabled this will move this transforms position towards the follow object's.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#synchronize-rotation)
⚙️ **Synchronize Rotation**
> **Synchronize Rotation** will move this transforms rotation towards the follow object's if it is enabled.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete#synchronize-scale)
⚙️ **Synchronize Scale**
> When true, will move this transforms scale towards the follow object's.
[PreviousMonoTickSmoother \[Obsolete\]](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/monoticksmoother-obsolete)
[NextNetworkObject](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-object)
Last updated 1 month ago
---
# NetworkManager | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager#description)
Description
------------------------------------------------------------------------------------------------------------------------------------
The **NetworkManager** is the central component of FishNet that manages the networking lifecycle, including establishing connections, hosting sessions, and handling client-server communication. Although this component manages the network, it should not itself be a networked object, and must not contain a [Network Object](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-object)
component on the same object, or as a parent or child of it. Additionally, the Network Manager can be used to register components and access them directly from it. This can be useful for other manager like scripts.
The Network Manager utilizes several sub-manager components, which it will add at runtime if they do not already exist on the object.
Check out its API page for more specific methods and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Managing.NetworkManager.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager#server-and-host)
Settings
-------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager#run-in-background)
⚙️ **Run In Background**
> This allows the application to run in the background when true. Running in the background is often essential for clients, and especially for the server.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager#dont-destroy-on-load)
⚙️ **Don't Destroy On Load**
> This will ensure the Network Manager persist between scene changes. If you are using only one Network Manager it's best to leave this true.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager#persistence)
⚙️ **Persistence**
> This option specifies how to behave when multiple NetworkManagers exist in your game.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager#logging)
⚙️ **Logging**
> This lets you specify what actions to log for builds, editor, and headless mode. When the field is not populated, the default logging settings are used. To make a custom logging settings open your create menu and choose: **Tools > Fish-Networking > Logging > Logging Configuration.**
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager#spawnable-prefabs)
⚙️ **Spawnable Prefabs**
> This option dictates which prefabs collection to use for networked objects. By default this field is automatically set to DefaultPrefabObjects for any saved scene; you can however make your own PrefabObjects class with customized rules and applications.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager#object-pool)
⚙️ **Object Pool**
> Which object pooling script to use. When not set, DefaultObjectPool is added automatically at run-time. You may inherit from ObjectPool to create your own.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager#refresh-default-prefabs)
⚙️ **Refresh Default Prefabs**
> While true, this will refresh the DefaultPrefabCollection every time play mode is entered. This is generally not needed to be enabled, but can be useful if your prefab collection is regularly becoming corrupted through symlinks.
[PreviousManagers](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers)
[NextTimeManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager)
Last updated 1 month ago
---
# OfflineTickSmoother | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/offlineticksmoother#description)
Description
----------------------------------------------------------------------------------------------------------------------------------------------
The OfflineTickSmoother behaves just like the [NetworkTickSmoother](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/networkticksmoother)
, except it initializes it's settings using the [InstanceFinder](https://fish-networking.gitbook.io/docs/guides/features/instancefinder-guides)
and can thus be placed beneath objects which are not networked. It is responsible for smoothing an offline object's transformation properties between network ticks.
There are several public APIs available for changing the smoother settings at runtime. An example of some are changing adaptive interpolation type, interpolation value, teleporting the smoothed object, and more.
Please review our [API](https://fish-networking.com/FishNet/api/api/FishNet.Component.Transforming.NetworkTickSmoother.html)
for all runtime settings.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/offlineticksmoother#settings)
Settings
----------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/offlineticksmoother#automatically-initialize)
⚙️ **Automatically Initialize**
> This option will configure this smoother in Awake using the [InstanceFinder](https://fish-networking.gitbook.io/docs/guides/features/instancefinder-guides)
> to listen to network callbacks. When false, you must manually call the `Initialize` method on this component.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/offlineticksmoother#initialization-settings)
⚙️ Initialization Settings
> These are essential to the component working.
>
> * **Target Transform** is the transform you want to follow. This is commonly the root [NetworkObject](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/networkobjects)
> but may be other nested NetworkBehaviours when using multiple smoothers beneath a single NetworkObject.
>
> * **Detach On Start** when true will unparent the object which the smoother is attached, placing it as root in world space. Detach is commonly used when the smoothed object is a camera target, given cameras do not handle rollback or larger tick steps well.
>
> * **Attach On Stop** when true will reparent the graphical object when the network stop callbacks occur on the object, as detach will unparent on network start callbacks. Typically you want to reattach graphical objects. If the Target Transform is destroyed while detached the object the smoother is attached to will also destroy itself.
>
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/offlineticksmoother#smoothing)
⚙️ Smoothing
> The **Smoothing** settings determine how the object is smoothed.
>
> * **Enable Teleport** will allow the graphical object to teleport to it's actual position – also known as the root position – if the position changes are drastic. Ideally you will not need this setting, but it's an available option should you desire to use it.
>
> * **Teleport Threshold** is shown while teleporting is enabled. If the graphical object's position is this many units away from the actual position, then the graphical object will teleport to the actual position.
>
>
> * **Adaptive Interpolation,** when not disabled, will increase the interpolation amount as the local client's latency becomes higher. Low settings of adaptive interpolation will increase the interpolation at lower amounts, while high will increases the interpolation more. When Adaptive Interpolation is disabled, a flat amount of interpolation will used at all times. Flat interpolation is often used in competitive or reaction based games to keep the interpolation consistent for all players. Flat interpolation is also necessary for accurate collider rollback, given our [collider rollback system](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation)
> needs to know the amount of interpolation a client sees to provide accurate raycast hit results. Adaptive interpolation is best used with casual games where you want the absolute smoothed experiences regardless of local client latency.
>
> * **Interpolation Value** is displayed when Adaptive Interpolation is off. This is a flat amount of interpolation that does not increase when the local client's latency does.
>
>
> * **Smoothed Properties** determines which properties of the transform will be smoothed. If smoothing is not set for a specific property then that particular value will persist in the same world space at all times. For example, if you uncheck Position from Smoothed Properties and move the root, the object which this component sits will never move in space, unless you of course move it manually.
>
Since a non-networked object cannot be owned there is only one set of smoothing settings, compared to NetworkTickSmoother which can have unique settings if Owner or Spectator.
[PreviousNetworkTickSmoother](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/networkticksmoother)
[NextMonoTickSmoother \[Obsolete\]](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/monoticksmoother-obsolete)
Last updated 1 month ago
---
# HashGrid | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager/hashgrid#description)
Description
---------------------------------------------------------------------------------------------------------------------------------------------
The **HashGrid** is required when using the [Grid Condition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer)
. This component is responsible for managing the grid and providing information to grid objects. While grids are less accurate than using the [Distance Condition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition)
they do provide better performance. HashGrid must be placed on or beneath the [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
object.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager/hashgrid#settings)
Settings
---------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager/hashgrid#grid-axes)
⚙️ **Grid Axes**
> These are which axes to base the grid on. Whichever axis is excluded will not have it's values considered in calculations. For example, if you are developing a 2D game most likely only XY matters, so you would choose the XY axes.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager/hashgrid#accuracy)
⚙️ **Accuracy**
> This determines how close a client's [FirstObject](https://fish-networking.com/FishNet/api/api/FishNet.Connection.NetworkConnection.html#FishNet_Connection_NetworkConnection_FirstObject)
> must be (in Unity units) to be considered in range. Note that accuracy is not as precise as when using a [Distance Condition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/distancecondition)
> .
[PreviousObserverManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager)
[NextRollbackManager (Pro Feature)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/rollbackmanager-pro-feature)
Last updated 1 month ago
---
# ClientManager | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/clientmanager#server-and-host)
Description
--------------------------------------------------------------------------------------------------------------------------------------
The **ClientManager** is FishNet's primary orchestrator for client-side networking, managing connections, state, event handling, and all data flow between the local client and the server.
It maintains a reference to the network connection of the local client, `Connection`, keeps track of all known networked objects on the client through `ClientObjects`, as well as optionally tracks all currently connected clients (when [server ID sharing](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#share-ids)
is enabled), using a dictionary of client connections. The ClientManager also has many useful events, such as when a client is authenticated and when the local client or a remote client changes their network state. It also is used for sending [broadcasts](https://fish-networking.gitbook.io/docs/guides/features/network-communication/broadcasts)
to the server.
When enabled, this component will also timeout the client from the server if the server doesn't respond after a set time.
Check out its API page for more specific methods and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Managing.Client.ClientManager.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/clientmanager#server-and-host-1)
Settings
-------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/clientmanager#remote-server-timeout)
⚙️ **Remote Server Timeout**
> This decides if the client should disconnect when the server seems unresponsive. This feature can be set to **disabled**, work in **development** and releases, or only **releases**.
>
> * **Timeout** is how long the server must be unresponsive before they are kicked.
>
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/clientmanager#change-frame-rate)
⚙️ **Change Frame Rate**
> While enabled, this will change the frame rate limitation when acting as client only.
>
> * **Frame Rate** is the frame rate to use while only the client is active. There is also a setting for client frame rate on the [ServerManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager)
> . When both client and server are active the higher of the two frame rates will be used.
>
[PreviousServerManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager)
[NextSceneManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/scenemanager)
Last updated 1 month ago
---
# SceneManager | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/scenemanager#server-and-host)
Description
-------------------------------------------------------------------------------------------------------------------------------------
FishNet’s **SceneManager** provides robust, synchronized, and event-driven scene management for networked Unity games, ensuring all clients and the server remain in sync throughout complex scene operations. It is responsible for coordinating which scenes are loaded or unloaded across all clients and the server, ensuring synchronization and exposes many options for the loading of scenes. There are multiple guides that are worth reading about it: [Scene Management](https://fish-networking.gitbook.io/docs/guides/features/scene-management)
The callbacks within the SceneManager are informative and quite useful, well worth looking into!
Check out its API page for more specific methods and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Managing.Scened.SceneManager.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/scenemanager#server-and-host-1)
Settings
------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/scenemanager#scene-processor)
⚙️ **Scene Processor**
> This determines how scene loads occur. When left empty the default scene processor is used. For more information on scene processing and addressables see [here.](https://fish-networking.gitbook.io/docs/guides/features/scene-management/custom-scene-processors/addressables)
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/scenemanager#light-probe-updating)
⚙️ **Light Probe Updating**
> This controls how light probes are updated after scenes are loaded.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/scenemanager#move-client-host-objects)
⚙️ **Move Client Host Objects**
> When enabled this will move objects visible to the host client to a temporary scene rather than let them be destroyed when a scene is unloaded. Objects are then destroyed next tick by the host client. This ensures that server and client side callbacks will work properly on the moved objects.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/scenemanager#set-active-scene)
⚙️ **Set Active Scene**
> This will allow the **SceneManager** to pick which scene to set as the active scene when loading and unloading scenes. By default global scenes are used, and if no global scenes then the clients single scene.
[PreviousClientManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/clientmanager)
[NextTransportManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager)
Last updated 1 month ago
---
# DebugManager | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager#server-and-host)
Description
-------------------------------------------------------------------------------------------------------------------------------------
The **Debug Manager** component can be used to gain extra information and temporarily tweak certain networking aspects to assist in debugging errors in your game. For example, if you are running into Scene ID errors you can enable the Detailed Writing of Scene Objects to know the object names instead of just IDs. These settings often come at the cost of a little more bandwidth used and are only enabled in the Editor and Development builds of your game.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager#server-and-host-1)
Settings
------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager#scene-objects)
⚙️ **Scene Objects**
> This adds information about scene objects instead of just sending IDs. You can use this when debugging missing sceneId / spawn-related issues.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager#rpc-lengths)
⚙️ **RPC Lengths**
> This will validate written versus read length of RPCs when enabled. Use in development to detect serialization mismatches in RPCs (written length vs read length).
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager#observersrpcs)
⚙️ **ObserversRpcs**
> This disables ObserverRpc links.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager#targetrpcs)
⚙️ **TargetRpcs**
> This disables TargetRpc links.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager#serverrpcs)
⚙️ **ServerRpcs**
> This disables ServerRpcs links.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager#replicaterpcs)
⚙️ **ReplicateRpcs**
> This disables ReplicateRpc links.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager#reconcilerpcs)
⚙️ **ReconcileRpcs**
> This disables ReconcileRpc links.
[PreviousRollbackManager (Pro Feature)](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/rollbackmanager-pro-feature)
[NextPrediction](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction)
Last updated 18 days ago
---
# NetworkObject | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-object#description)
Description
--------------------------------------------------------------------------------------------------------------------------
The **NetworkObject** component is essential for any game object that needs to be synchronized or controlled over the network using FishNet. It acts as the anchor for all [networked behaviors](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides)
and manages [identification](https://fish-networking.gitbook.io/docs/guides/features/server-and-client-identification)
, [ownership](https://fish-networking.gitbook.io/docs/guides/features/ownership)
, and the object's lifecycle within the networking system.
You can nest network objects, place them in scenes, or in prefabs, but the component itself cannot be added to a game object at run-time.
Check out the API page for more specific methods, properties, and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Object.NetworkObject.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-object#settings)
Settings
--------------------------------------------------------------------------------------------------------------------
Settings
Prediction

Default settings in the **Settings** tab
⚙️ **Is Networked**
> Indicates if an object should always be considered a networked object. When false the object will not initialize as networked. This may be useful if you have objects that you sometimes want to only run locally, and other times spawn over the network. Anytime an object is spawned using [ServerManager.Spawn](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/spawning)
> _Is Networked_ automatically becomes true for that instantiated copy.
⚙️ **Is Spawnable**
> This should be enabled if the object can spawn at runtime; this is generally false for scene prefabs as you do not need to instantiate and manually spawn them. While true, this object's prefab will be added to [DefaultPrefabObjects](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/spawnableprefabs/defaultprefabobjects)
> .
⚙️ **Is Global**
> When enabled, this will make the **NetworkObject** known to all clients at all times, the object will also be added to the [Don't Destroy on Load](https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html)
> scene. This setting will have **no** effect on [scene objects](https://fish-networking.gitbook.io/docs/guides/high-level-overview/terminology/miscellaneous#scene-object)
> , but for instantiated objects it may be set in the prefab or changed at run-time immediately after instantiating the object.
⚙️ **Initialize Order**
> Determines the order in which **NetworkObjects** spawned in the same tick will run their [initialization callbacks](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#callbacks)
> . A lower value will have higher priority and execute first. The default value is 0 and negative values are allowed.
⚙️ **Prevent Despawn On Disconnect**
> This will ensure the object will not be destroyed or despawned when the owning client disconnects.
⚙️ **Default Despawn Type**
> This is the default behavior when despawning the object. Objects are typically destroyed when despawned, but this can be set to other values, such as _Pool_, to save performance.
>
> Check out the [Object Pooling](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/spawning/object-pooling)
> guide for more information.

Default settings in the **Prediction** tab
⚙️ **Enable Prediction**
> This should be used to set whether the object is making use of [prediction](https://fish-networking.gitbook.io/docs/guides/features/prediction/what-is-client-side-prediction)
> or not. Enabling this will make available the following settings:
⚙️ **Prediction Type**
> You can use this to set if you are using rigidbodies or not for the predicted object. For example, if you were updating your transform with a CharacterController component this would be set to _Other_. If you were using rigidbodies you would choose _Rigidbody_ or _Rigidbody2D_.
⚙️ **Enable State Forwarding**
> This is used to forward the replicate and reconcile states to all clients. This is ideal for games where you want all clients and server to run the same inputs. Disabling this setting will cause prediction to only be used on the owner; you will then have to synchronize to spectators using other means, such as a [NetworkTransform](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform)
> or custom script.
⚙️ **Graphical Object**
> This is the object which holds the graphics for your predicted object. When using client-side prediction all predicted objects must have their graphics as a child of the predicted object. For example, if your rigidbody and collider are on the root object, the graphics must remain beneath the root and set as the graphical object.
⚙️ **Detach Graphical Object**
> When **true**, this will detach and re-attach the graphical object at runtime when the client initializes/de-initializes the item. This can resolve camera jitter or be helpful objects child of the graphical which do not handle reconiliation well, such as certain animation rigs. Transform is detached after [OnStartClient](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#onstartclient)
> , and reattached before [OnStopClient](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#onstopclient)
> .
⚙️ **Interpolation**
> Is how many ticks to interpolate the graphics on client owned objects. A setting as low as 1 can usually be sufficient to smooth over the frames between ticks.
⚙️ **Enable Teleport**
> This will allow the graphical object to teleport to it's actual position – also known as the root position – if the position changes are drastic. Ideally you will not need this setting, but it's an available option should you desire to use it.
⚙️ **Teleport Threshold**
> This is shown while teleporting is enabled. If the graphical object's position is this many units away from the actual position, then the graphical object will teleport to the actual position.
[PreviousDetachableNetworkTickSmoother \[Obsolete\]](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete)
[NextNetworkBehaviour](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-behaviour-components)
Last updated 1 month ago
---
# TimeManager | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager#server-and-host)
Description
-------------------------------------------------------------------------------------------------------------------------------------
The **TimeManager** component is responsible for managing network time and tick-based systems within the networking framework. It is central to keeping networked objects synchronized in time, handling ticks, timing conversions, physics step control, and providing hooks for network-related timing events in FishNet. It does this by managing how network timing is performed, either using fixed ticks or variable intervals and by providing precise timing for sending and receiving network data, ensuring synchronization between server and clients. It also controls the physics simulation mode (manual, automatic, or disabled) to maintain consistent simulation across the network.
Check out its API page for more specific methods and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Managing.Timing.TimeManager.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager#server-and-host-1)
Settings
------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager#update-order)
⚙️ **Update Order**
> Controls when the TimeManager will invoke its version of Unity callbacks. BeforeTick would be a good option if you wanted to collect input in OnUpdate before the tick occurred.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager#timing-type)
⚙️ **Timing Type**
> Dictates when data is sent and read. When set to Tick data is only processed on frames which also tick. When Variable is selected data will be sent and read every frame, when available.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager#allow-tick-dropping)
⚙️ **Allow Tick Dropping**
> Will let the client skip ticks when they occur several times over a single frame. This can be useful to prevent the client from running an increasing number of simulations per frame, resulting in more performance loss.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager#maximum-frame-ticks)
⚙️ **Maximum Frame Ticks**
> This is shown when **Allow Tick Dropping** is enabled. This value is the maximum number of ticks that can occur per frame before the client begins dropping ticks to recover performance.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager#tick-rate)
⚙️ **Tick Rate**
> This is an average of how many times per second the TimeManager will invoke tick events, as well how often data may be sent or received.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager#ping-interval)
⚙️ **Ping Interval**
> How often, in seconds, a user receives a ping update. A larger ping has a very small chance of server tick synchronization losing accuracy. These changes do not affect prediction.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager#timing-interval)
⚙️ **Timing Interval**
> This is how many seconds between prediction timing updates. Lower values will result in marginally more accurate timings at the cost of bandwidth.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager#physics-mode)
⚙️ **Physics Mode**
> The Physics Mode determines how physics are run. **Unity** will let the engine manage physics. **TimeManager** simulates physics on ticks. When using Client-Side Prediction you must use the **TimeManager** setting.
[PreviousNetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
[NextPredictionManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/predictionmanager)
Last updated 1 month ago
---
# RollbackManager (Pro Feature) | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/rollbackmanager-pro-feature#server-and-host)
Description
----------------------------------------------------------------------------------------------------------------------------------------------------
The RollbackManager must be added and configured properly for lag compensation to function properly. Objects you wish to rollback must contain the [ColliderRollback](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback)
script on them. You can learn more about using it on this page: [Lag Compensation](https://fish-networking.gitbook.io/docs/guides/features/lag-compensation)
Check out its API page for more specific methods [here](https://fish-networking.com/FishNet/api/api/FishNet.Component.ColliderRollback.RollbackManager.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/rollbackmanager-pro-feature#server-and-host-1)
Settings
---------------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/rollbackmanager-pro-feature#bounding-box-layer)
⚙️ **Bounding Box Layer**
> This is the layer to first test against before rolling back colliders. When a layer is specified a collider will be added to your [ColliderRollback](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/colliderrollback)
> objects; because of this, be sure to use a layer which has no physics intersections and is not used for anything else.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/rollbackmanager-pro-feature#maximum-rollback-time)
⚙️ **Maximum Rollback Time**
> This is the maximum of seconds colliders may rollback. Using a value of 1f would allow colliders to rollback at most one second in the past, which is a very reasonable amount of time given typical player latencies are less than 100ms.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/rollbackmanager-pro-feature#interpolation)
⚙️ **Interpolation**
> This is the amount of interpolation you are using on your [NetworkTransform](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-transform)
> components. Or if you are using rigidbodies with prediction this would be the **interpolation** value on the smoothing component.
[PreviousHashGrid](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager/hashgrid)
[NextDebugManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/debugmanager)
Last updated 1 month ago
---
# StatisticsManager | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/statisticsmanager#server-and-host)
Description
------------------------------------------------------------------------------------------------------------------------------------------
The **Statistics Manager** component is responsible for tracking and reporting network traffic statistics for your multiplayer game. Its **Network Traffic** can be used to gain basic information about how much network traffic your game is using. These values must be enabled for the [BandwidthDisplay](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/bandwidthdisplay)
component to function.
Check out its API page for more specific methods and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Managing.Statistic.StatisticsManager.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/statisticsmanager#server-and-host-1)
Settings
-----------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/statisticsmanager#update-interval)
⚙️ **Update Interval**
> This is how often network traffic related operations occur, such as invoking update events.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/statisticsmanager#update-client)
⚙️ **Update Client**
> This will invoke client traffic updates when enabled.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/statisticsmanager#update-server)
⚙️ **Update Server**
> This will invoke server traffic updates when enabled.
[PreviousIntermediateLayer](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager/intermediatelayer)
[NextObserverManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager)
Last updated 1 month ago
---
# TransportManager | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager#description)
Description
-------------------------------------------------------------------------------------------------------------------------------------
The **TransportManager** in FishNet is a central component responsible for communicating with the underlying network transport to send and receive data. It acts as the bridge between FishNet’s networking system and the actual transport layer, enabling networked games to send/receive packets to and from clients and servers. There is also support for latency simulation for testing different network conditions.
With the TransportManager you can optionally utilize an intermediate layer to modify data before it’s sent or after it’s received (e.g., encryption, compression).
If you want to modify network data such as for encryption, or use any one of our number of transports, you will want to add this component to your [NetworkManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
game object.
Check out its API page for more specific methods and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Managing.Transporting.TransportManager.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager#settings)
Settings
-------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager#transport)
⚙️ **Transport**
> This field indicates which [transport](https://fish-networking.gitbook.io/docs/guides/high-level-overview/transports)
> to use. When left empty, the default transport ([Tugboat](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat)
> ) is used, or the first transport manually added to the object which the TransportManager resides.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager#intermediate-layer)
⚙️ **Intermediate Layer**
> This is used to specify a custom [intermediate layer](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager/intermediatelayer)
> to use.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager#latency-simulator)
⚙️ Latency Simulator
> These settings allow you to simulate a variety of latency scenarios on any transport.
>
> * **Enabled:** Toggles the enabled state of the simulator.
>
> * **Simulate Host:** When enabled, this will also simulate latency for host client.
>
> * **Latency:** Is the amount of latency to simulate in milliseconds.
>
> * **Unreliable:** Features only used for unreliable packets.
>
> * **Out Of Order:** The percentage chance to send an out of order packet.
>
> * **Packet Loss:** The chance to drop a packet.
>
>
[PreviousSceneManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/scenemanager)
[NextIntermediateLayer](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager/intermediatelayer)
Last updated 1 month ago
---
# ObserverManager | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager#server-and-host)
Description
----------------------------------------------------------------------------------------------------------------------------------------
**ObserverManager** is used to globally customize the observer system. Observer conditions within the ObserverManager will be automatically added to [NetworkObjects](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/networkobjects)
, unless the [NetworkObserver](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-observer)
component is set to ignore the manager.
Check out its API page for more specific methods and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Managing.Observing.ObserverManager.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager#server-and-host-1)
Settings
---------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager#update-host-visibility)
⚙️ **Update Host Visibility**
> This will hide renderers on networked objects which are hidden to host client. When true, all networked objects will be visible to the host client even if these objects would normally be despawned for the client.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager#maximum-timed-observers)
⚙️ **Maximum Timed Observers**
> The maximum duration that the server will take to update timed observer conditions as server load increases. Lower values will result in timed conditions being checked quicker at the cost of performance.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager#default-conditions)
⚙️ **Default Conditions**
> These are [Observer Conditions](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions)
> which will be added to all NetworkObjects by default.
>
> Almost all games should utilize at least the [Scene Observer Condition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/scenecondition)
> .
[PreviousStatisticsManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/statisticsmanager)
[NextHashGrid](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager/hashgrid)
Last updated 1 month ago
---
# IntermediateLayer | Fish-Net: Networking Evolved
Using the IntermediateLayer is simple as overriding two methods, one for when data is sent and one for when data is received.
Below is an example included with FishNet which demonstrates using a Caesar cipher to encrypt data.
You can find this example in the Demos folder, file name **IntermediateLayerCipher.cs**.
Copy
using FishNet.Managing.Transporting;
using System;
namespace FishNet.Example.IntermediateLayers
{
/* Below is an example of creating a basic Caesar Cipher.
* Bytes are modified by a set value of CIPHER_KEY, and then
* the original src ArraySegment is returned.
*
* It's very important to only iterate the bytes provided
* as the segment. For example, if the ArraySegment contains
* 1000 bytes but the Offset is 3 and Count is 5 then you should
* only iterate bytes on index 3, 4, 5, 6, 7. The code below
* shows one way of properly doing so.
*
* If you are to change the byte array reference, size, or segment
* count be sure to return a new ArraySegment with the new values.
* For example, if your Offset was 0 and count was 10 but after
* encrypting data the Offset was still 0 and count 15 you would
* return new ArraySegment(theArray, 0, 15); */
public class IntermediateLayerCipher : IntermediateLayer
{
private const byte CIPHER_KEY = 5;
// Decipher incoming data.
public override ArraySegment HandleIncoming(ArraySegment src, bool fromServer)
{
byte[] arr = src.Array;
int length = src.Count;
int offset = src.Offset;
for (int i = src.Offset; i < (offset + length); i++)
{
short next = (short)(arr[i] - CIPHER_KEY);
if (next < 0)
next += 256;
arr[i] = (byte)next;
}
return src;
}
// Cipher outgoing data.
public override ArraySegment HandleOutgoing(ArraySegment src, bool toServer)
{
byte[] arr = src.Array;
int length = src.Count;
int offset = src.Offset;
for (int i = offset; i < (offset + length); i++)
{
short next = (short)(arr[i] + CIPHER_KEY);
if (next > byte.MaxValue)
next -= 256;
arr[i] = (byte)next;
}
return src;
}
}
}
In some cases you may need to inject headers into data sent, such as if you are validating each packet with an authorization key.
If such is the case it may be wise to reserve a number of bytes needed for your header. You can do this by calling SetMTUReserve() on your TransportManager. Here is an example of doing such.
Copy
public class MyIntermediateLayer : IntermediateLayer
{
public override void InitializeOnce(TransportManager manager)
{
base.InitializeOnce(manager);
const int bytesForMyHeader = 10;
manager.SetMTUReserve(bytesForMyHeader);
}
// ...rest omitted
[PreviousTransportManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/transportmanager)
[NextStatisticsManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/statisticsmanager)
Last updated 1 month ago
---
# FAQ | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#miscellaneous)
Miscellaneous
----------------------------------------------------------------------------------------------------------------------------------
How do I send some initial data to the server as soon as I connect and before my player spawns?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#how-do-i-send-some-initial-data-to-the-server-as-soon-as-i-connect-and-before-my-player-spawns)
Broadcast are generally the best choice for sending data without a player object. Many developers trade this data in a custom [authenticator](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/authenticator)
class, which allows data to be sent before the client initializes anything at all for the network. See our PasswordAuthenticator script for an example of doing this.
Another approach is to use a custom player spawner instead of our [PlayerSpawner](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/playerspawner)
. You may send broadcasts back and forward freely, and only spawn your player when you feel is right. See [broadcasts](https://fish-networking.gitbook.io/docs/guides/features/network-communication/broadcasts)
for more information on this feature.
Why can I see my player object but not control it?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-can-i-see-my-player-object-but-not-control-it)
Most often when this occurs you actually are able to control your player, but you simply do not see them because your game could be using the incorrect camera. This is seen when more than one player spawns, and the player prefab has a live camera beneath them.
To resolve this issue simply use one camera in the scene and take over it as needed, or disable the camera on your player prefab and only enable it if you own the object.
How do I update to a new or Pro version of Fish-Networking?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#how-do-i-update-to-a-new-or-pro-version-of-fish-networking)
You can install Fish-Networking free over Pro, and Pro over free without any issues. Just download free or Pro and import normally. See our [Pro section](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support)
for information on downloading Pro.
If you import a new version of Fish-Networking and there are immediately compile errors, delete your FishNet folder then import the latest version again.
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#hosting-and-connectivity)
Hosting and connectivity
--------------------------------------------------------------------------------------------------------------------------------------------------------
How do I make rooms in Fish-Networking?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#how-do-i-make-rooms-in-fish-networking)
There are several ways to make rooms within Fish-Networking.
You can use a third party service which creates individual server instances, each acting as their own. There are several services which provide this, an example of one is [PlayFlow Cloud](https://fish-networking.gitbook.io/docs/guides/server-hosting/services/playflow-cloud)
.
Another option is to have a single Fish-Networking instance manage rooms in a single build. This reduces the complexity of a third party service but requires you to develop with [stacked scenes](https://fish-networking.gitbook.io/docs/guides/features/scene-management/scene-stacking)
in mind. Our project [Lobby and Worlds](https://fish-networking.gitbook.io/docs/overview/readme/pro-projects-and-support#projects)
accomplishes this, and is available to supporters.
While stacked scenes aren't necessarily difficult, and support for them are built-into Fish-Networking, there are still some Unity limitations around them. An example being, not all physics API are available in stacked scenes. See [Physics Scenes](https://docs.unity3d.com/ScriptReference/PhysicsScene.html)
for more information; there is also PhysicsScene2D.
Why are my Meta Quest/mobile players not immediately disconnecting when they close the game?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-are-my-meta-quest-mobile-players-not-immediately-disconnecting-when-they-close-the-game)
Mobile apps don't typically close like a normal application. Instead, mobile apps are suspended so that you may "re-open" them quickly.
Clients will likely disconnect if the game remains in the background for longer than the timeout settings on your Client/ServerManager.
Often you can utilize the Unity callback OnApplicationPause in mobile games to tell the ClientManager to disconnect.
How can I have p2p (player hosted) games without paying for dedicated servers?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#how-can-i-have-p2p-player-hosted-games-without-paying-for-dedicated-servers)
A large variety of third party services allow you to host p2p games. Steam and EOS are the two most common ones, but plenty are available. We support both Steam and EOS.
Why don't my games connect when I press server on one device and client on another even on a LAN?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-dont-my-games-connect-when-i-press-server-on-one-device-and-client-on-another-even-on-a-lan)
When trying to connect to your IP directly you must allow connections through your firewall. Be sure to adjust your firewall to allow the port used by your game.
You can also join/create LAN games without changing your firewall by using our [Fish-Networking Discovery addon](https://fish-networking.gitbook.io/docs/overview/asset-integrations/fish-network-discovery)
.
What can I do if I encounter a "port already used"?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#what-can-i-do-if-i-encounter-a-port-already-used)
Check to make sure you aren't trying to start the FishNet server twice, perhaps due to manually starting it as well as FishNet automatically starting it if enabled in the [ServerManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager)
component's [Start On Headless](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#start-on-headless)
option. You can also try enabling the [ReuseAddress](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat#reuse-address)
option if using the [Tugboat transport](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/transports/tugboat)
. This will allow the server to bind to the port even if it was recently used, making server restarts and multiple concurrent instances possible without port conflicts.
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#missing-or-hidden-objects)
Missing or hidden objects
----------------------------------------------------------------------------------------------------------------------------------------------------------
Why are the (mesh/sprite/etc.) renderers on my object disabled on the clientHost?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-are-the-mesh-sprite-etc.-renderers-on-my-object-disabled-on-the-clienthost)
By default when the clientHost is not an observer of an object the renders for the object are disabled. This is to simulate as if the object is not spawned for the clientHost, though it of course is as the server is still using the object.
You may disable this feature by changing a setting on the [ObserverManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager)
. It's also possible to disable this per [NetworkObject](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/network-object)
.
You can also utilize [NetworkObject events](https://fish-networking.com/FishNet/api/api/FishNet.Object.NetworkObject.html#events)
to manually update renderers.
Why are my objects in the scene disabled?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-are-my-objects-in-the-scene-disabled)
**First most, check the console for any Fish-Networking warnings or errors.**
Scene objects become disabled when the client is not an observer of the scene. Our [observer system](https://fish-networking.gitbook.io/docs/guides/features/observers)
controls what objects clients can see, spawn, and transmit.
The most common reason a client is not an observer of the scene is because the server has not added the client to the scene. This can be done manually if you know the client has the scene loaded, using a Fish-Networking SceneManager reference, and calling AddConnectionToScene. EG: sceneManager.AddConnectionToScene(yourClient).
You may just as well use our automated system but telling the SceneManager to load the scene for the client. See [this page](https://fish-networking.gitbook.io/docs/guides/features/scene-management/loading-scenes)
for more information on that.
If you are starting entering play mode with only one scene you may be manually spawning the player but not adding to starting scene. See our PlayerSpawner script within your Fish-Networking installation for an example of how to instantiate player prefabs, and add clients to scenes.
Why can my client not see objects?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-can-my-client-not-see-objects)
Related: Why are my objects in the scene disabled?
Related: Why are the mesh/sprite/etc. renderers on my object disabled on the clientHost?
If a client is not an observer of an object then the server does not spawn the object for the client. See our [observers guide](https://fish-networking.gitbook.io/docs/guides/features/observers)
for more information.
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#synctypes-syncvar-synclist-etc)
SyncTypes (SyncVar, SyncList, etc.)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Why are my SyncTypes not syncing on other devices when I change it on the owner client?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-are-my-synctypes-not-syncing-on-other-devices-when-i-change-it-on-the-owner-client)
Clients may update SyncTypes locally, but they are not synchronized over the network; only the server may synchronize SyncTypes. Typically, clients will send a Remote Procedure Call to the server indicating it wants to update something, and the server complies. See these guides for more information: [Remote Procedure Calls](https://fish-networking.gitbook.io/docs/guides/features/network-communication/remote-procedure-calls)
, [SyncTypes](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing)
.
Why do I receive remote procedure calls before SyncType updates?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-do-i-receive-remote-procedure-calls-before-synctype-updates)
SyncTimes run on intervals, defaulted to every 100ms if the SyncType has changed; the interval may be changed on the [ServerManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager)
.
However, even if the interval is met, SyncTypes always synchronize after remote procedure calls (RPC), even if you set them before calling the RPC. You can change SyncTypes to synchronize first on a per SyncType basis using [SyncTypeSettings](https://fish-networking.com/FishNet/api/api/FishNet.Object.Synchronizing.SyncTypeSettings.html)
. Review also [SyncTypes guide](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing)
thoroughly for updating a SyncTypes settings.
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#remote-procedure-calls-rpcs)
Remote Procedure Calls (RPCs)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
How do I know who sent a ServerRpc, should I pass in the LocalConnection each time as an argument?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#how-do-i-know-who-sent-a-serverrpc-should-i-pass-in-the-localconnection-each-time-as-an-argument)
By default only clients which own the objects may send a ServerRpc. You may bypass this restriction by setting 'RequireOwnership' to false in the ServerRpc attribute. If you've not bypassed this restriction, the sender will always be owner.
The [ServerRpc guide](https://fish-networking.gitbook.io/docs/guides/features/network-communication/remote-procedure-calls#serverrpc)
shows how to set RequireOwnership, as well how to know which spectator might be sending the RPC. You will notice in the guide a NetworkConnection is specified at the end of the RPC parameters. You do not pass in a connection when sending the ServerRpc, it's set automatically when you receive the RPC call.
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#errors-and-warnings)
Errors and warnings
----------------------------------------------------------------------------------------------------------------------------------------------
Why do I get the warning: "Cannot spawn object because server is not active and predicted spawning is not enabled."?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-do-i-get-the-warning-cannot-spawn-object-because-server-is-not-active-and-predicted-spawning-is)
Typically only the server may spawn networked objects. You will see this warning if you try to network spawn an object on a client, while predicted spawning is not enabled.
Predicted spawning must be turned on in the [ServerManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager)
. See also the [PredictedSpawn component](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/prediction/predictedspawn)
.
Why do I get a NullReferenceException in SyncBase when an object spawns?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-do-i-get-a-nullreferenceexception-in-syncbase-when-an-object-spawns)
Most likely you are seeing this error because your SyncType does not have an initializer. When declaring SyncTypes they must be readOnly and initialized.
For example: `private readonly SyncVar _mySv = new();` You can view more information about SyncTypes [here](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing)
.
Why do I get the warning: "Cannot complete action because client is not active."?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-do-i-get-the-warning-cannot-complete-action-because-client-is-not-active)
You will see this warning if the client is not started. It's also possible to see this warning if you are trying to communicate with the server such as using a ServerRpc before the object is initialized for the client. See NetworkBehaviour [API](https://fish-networking.com/FishNet/api/api/FishNet.Object.NetworkBehaviour.html)
and [callback order](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#callbacks)
for more information on this.
It's also possible you have a method decorated with the '\[Client\]' attribute, such as if you want a method to only run on clients. This will cause the warning, even if your intents are to not have the client connected. If this is true, you may set LoggingType to Off within the Client attribute.
Why do I get the warning: "Cannot complete action because server is not active."?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-do-i-get-the-warning-cannot-complete-action-because-server-is-not-active)
You will see this warning if the server is not started. It's also possible to see this warning if you are trying to communicate with a client such as using a Target or ObserversRpc before the object is initialized for the server. See NetworkBehaviour [API](https://fish-networking.com/FishNet/api/api/FishNet.Object.NetworkBehaviour.html)
and [callback order](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/network-behaviour-guides#callbacks)
for more information on this.
It's also possible you have a method decorated with the '\[Server\]' attribute, such as if you want a method to only run on server. This will cause the warning, even if your intents are to not have the server running. If this is true, you may set LoggingType to Off within the Server attribute.
Why do I get this error? "SceneId of 4013929391 not found in SceneObjects."?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-do-i-get-this-error-sceneid-of-4013929391-not-found-in-sceneobjects)
You will see this error if the server thinks your client is in scene, when the client does not have the scene loaded. Using a [SceneCondition](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/scriptableobjects/observerconditions/scenecondition)
on the [ObserverManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager)
will typically resolve this problem. You can simply add the ObserverManager component to your network manager and give it the scene condition in its [Default Conditions](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/observermanager#default-conditions)
list.
If you are already using a SceneCondition and are certain the correct scenes are being loaded then open the scenes which you are having problems with, and use the [**Reserialize NetworkObjects** utility](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/configuration-and-tools#reserialize-networkobjects)
from the (**Tools → Fish-Networking** **→ Reserialize NetworkObjects**) toolbar menu.
You can also troubleshoot this further by adding the DebugManager component to your NetworkManager and enable Write Scene Object Details. The next time you see the error it will also print the scene and object name the spawn or message was intended for.
In very rare cases this is a bug. If you've tried all the troubleshooting steps above without success consider reaching us on our [Discord](https://fish-networking.gitbook.io/docs#external-links)
for help.
Why do I get this error? "'System.Void System.ParamArrayAttribute::.ctor()' is declared in another module and needs to be imported"?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#why-do-i-get-this-error-system.void-system.paramarrayattribute-.ctor-is-declared-in-another-module-a)
On very rare occasion you may encounter this error after making a change to your script. This is a Unity bug that we have no way to resolve internally. The exact cause is unknown, but we know it's related to Unity caching something improperly in a script.
There are a few work-arounds that have worked consistently; most commonly adding a new empty method with a parameter (try without as well) and saving the script will resolve the issue. At some point the Unity cache will fix itself, and the empty method can later be removed.
Clearing the library cache seems to have no benefits of resolving this error. The only success we've seen besides the work around is moving everything to a completely new project. Because creating a new project is so much work it's recommended to use the work-around.
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#objects)
Objects
----------------------------------------------------------------------------------------------------------------------
What does the message "AssetPathHash is not set for GameObject ..." mean?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#what-does-the-message-assetpathhash-is-not-set-for-gameobject-...-mean)
There unfortunately is not any definitive cause of this error. Usually restarting Unity will resolve the problem.
This message can also be seen when a NetworkObject is a prefab which is unable to save changes. If your object is a prefab check to make sure there are no missing scripts, or anything else preventing saving of the prefab.
If issues persist please reach us on our [Discord](https://fish-networking.gitbook.io/docs#external-links)
.
How do I get the player game object?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#how-do-i-get-the-player-game-object)
You can get a list of all objects owned by a connection by using conn.Objects.
If you want to grab the first object spawned for a connection use conn.FirstObject. You can set the FirstObject at runtime if you have a preference to the 'FirstObject'.
If you want to know what objects you own as a client you can grab your own connection under clientManager.Connection.
How can I make the player spawner spawn my player when I load the lobby into the game scene instead of immediately?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#how-can-i-make-the-player-spawner-spawn-my-player-when-i-load-the-lobby-into-the-game-scene-instead)
This is done by writing a custom player spawner. You can use our PlayerSpawner as an example, but instead of spawning immediately only spawn after a client has been added to a scene.
A good place to start is using the [ClientPresenceChangeEnd callback](https://fish-networking.gitbook.io/docs/guides/features/scene-management#scene-events)
to know when the client has entered the scene and has visibility of objects within it.
How do I get an object from its NetworkObject Id?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#how-do-i-get-an-object-from-its-networkobject-id)
In most cases you do not need to pass around a NetworkObject Id. The recommended approach, if sending over the network, is to send the NetworkObject reference itself. This automatically efficiently sends the NetworkObject information, and returns the proper object on the other end.
Should you have reasons to use the Id specifically you can look up spawned objects within the serverManager.Objects.Spawned collection, or clientManager.Objects.Spawned if client only. Note: these collections will likely be consolidated in a later release.
[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#performance)
Performance
------------------------------------------------------------------------------------------------------------------------------
How many CCU (concurrent users) can Fish-Networking have?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#how-many-ccu-concurrent-users-can-fish-networking-have)
Our framework does not have any CCU limitations. How many players you are able to host on a single server varies greatly depending upon your server hardware, game mechanics, and your coding efficiency.
Several Fish-Networking games have achieved 500+ CCU, and thousands of NetworkObjects.
Can you use sharding (world splitting) in Fish-Networking?[](https://fish-networking.gitbook.io/docs/guides/troubleshooting/frequently-asked-questions-faq#can-you-use-sharding-world-splitting-in-fish-networking)
Fish-Networking does not take any special actions to support nor restrict sharding. Some users experienced success with custom implementations of world sharding, but we do not officially support this feature.
With how powerful servers have become world sharding is rarely needed, and generally we discourage against it.
[PreviousReport Example](https://fish-networking.gitbook.io/docs/guides/troubleshooting/creating-bug-reports/report-example)
[NextComponents](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components)
Last updated 12 days ago
---
# ServerManager | Fish-Net: Networking Evolved
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#server-and-host)
Description
---------------------------------------------------------------------------------------------------------------------------------------
The **ServerManager** is a central component responsible for handling server-related data and actions. It maintains information and handles operations for server-side networked objects as well as tracking connected clients, both authenticated and unauthenticated. Additionally, it monitors client timeouts and disconnects unresponsive clients.
The **ServerManager** can be used directly to start and stop the FishNet server as well as monitor its state and send [broadcasts](https://fish-networking.gitbook.io/docs/guides/features/network-communication/broadcasts)
to the clients.
Check out its API page for more specific methods and events [here](https://fish-networking.com/FishNet/api/api/FishNet.Managing.Server.ServerManager.html)
.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#server-and-host-1)
Settings
--------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#synctype-rate)
⚙️ **SyncType Rate**
> This is the default send rate for [SyncTypes](https://fish-networking.gitbook.io/docs/guides/features/network-communication/synchronizing)
> . Setting it to 0 will send updates every tick. This value can be overridden for individual SyncTypes.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#spawn-packing)
⚙️ **Spawn Packing**
> This determines how well transform properties will be packed when being sent in a spawn message. If transforms spawn marginally off reducing the packing may help.
>
> These can be edited for **Position**, **Rotation** and **Scale** independently.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#change-frame-rate)
⚙️ **Change Frame Rate**
> When enabled, this will change the frame rate limitation when acting as server only.
>
> * **Frame Rate** is the frame rate to use while only the server is active. There is also a setting for client frame rate on the [ClientManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/clientmanager)
> . When both server and client are active the higher of the two frame rates will be used.
>
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#start-on-headless)
⚙️ **Start On Headless**
> When this is enabled, FishNet will automatically start the server when loaded on a server (headless) build.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#remote-client-timeout)
⚙️ **Remote Client Timeout**
> This decides if the server should disconnect clients which seem unresponsive. This feature can be set to disabled, work in development and releases, or only releases.
>
> * **Timeout** is how long the client must be unresponsive before they are kicked.
>
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#share-ids)
⚙️ **Share Ids**
> While true, this enables clients to be aware of other clients in-game and objects owned by other clients. Objects owned by other clients are only known if they are available to the local client, such as through the observer system. Client Ids are not sensitive information but leaving this option enabled will use slightly additional bandwidth.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#authenticator)
⚙️ **Authenticator**
> This is where you can specify which [authenticator](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/utilities/authenticator)
> to use. When left empty clients may join the server without specialized authentication.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/server-manager#allow-predicted-spawning)
⚙️ **Allow Predicted Spawning**
> This option lets prefabs and scene objects be setup to use [Predicted Spawning](https://fish-networking.gitbook.io/docs/guides/features/networked-gameobjects-and-scripts/spawning/predicted-spawning)
> . You can use this setting to enable or disable predicted spawning without having to change the settings for every object. This value may also be set at runtime. If changing at runtime be certain to also change on the client; otherwise they could be kicked for trying to use a disabled feature.
>
> * **Reserved Object Ids** is the number of ObjectIds to reserve per client for predicted spawning. Clients will start out with the specified number of Ids and receive new ones as the server validates their predicted spawning requests. For example: if this value was set to 15 and a client with a 100ms ping sent 3 predicted spawns in one tick then they would have only 12 predicted spawns left to use until the server responded with 3 new Ids, which would be approximately 50ms later.
>
[PreviousPredictionManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/predictionmanager)
[NextClientManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/clientmanager)
Last updated 1 month ago
---
# MonoTickSmoother [Obsolete] | Fish-Net: Networking Evolved
This component is obsolete, you can use the [OfflineTickSmoother](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/offlineticksmoother)
instead of this now.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/monoticksmoother-obsolete#description)
Description
----------------------------------------------------------------------------------------------------------------------------------------------------
The main difference between NetworkTickSmoother and MonoTickSmoother is that MonoTickSmoother does not need to be placed on a networked object, and initializes by default using InstanceFinder; NetworkTickSmoother initializes using NetworkBehaviour callbacks.
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/monoticksmoother-obsolete#settings)
Settings
----------------------------------------------------------------------------------------------------------------------------------------------

Default settings
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/monoticksmoother-obsolete#use-instance-finder)
⚙️ **Use Instance Finder**
> This option determines whether or not to use the [InstanceFinder](https://fish-networking.gitbook.io/docs/guides/features/instancefinder-guides)
> to find the [TimeManager](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/time-manager)
> . When this is false you will need to specify which TimeManager to use by calling `SetTimeManager`. This can be useful in cases where you have multiple [NetworkManagers](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/managers/network-manager)
> and therefore multiple TimeManagers and you want to specify which one to use.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/monoticksmoother-obsolete#graphical-object)
⚙️ **Graphical Object**
> This is the object which holds the graphics you want to smooth. The graphics should be a child of the game object with this component.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/monoticksmoother-obsolete#enable-teleport)
⚙️ **Enable Teleport**
> This will allow the graphical object to teleport to it's actual position – also known as the root position – if the position changes are drastic. Ideally you will not need this setting, but it's an available option should you desire to use it.
###
[](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/monoticksmoother-obsolete#teleport-threshold)
⚙️ **Teleport Threshold**
> The **Teleport Threshold** is shown while teleporting is enabled. If the graphical object's position is this many units away from the actual position, then the graphical object will teleport to the actual position.
[PreviousOfflineTickSmoother](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/offlineticksmoother)
[NextDetachableNetworkTickSmoother \[Obsolete\]](https://fish-networking.gitbook.io/docs/fishnet-building-blocks/components/tick-smoothers/detachablenetworkticksmoother-obsolete)
Last updated 1 month ago
---