Executing on Server or Client
How you can run certain code on only the server, or only a client, or only on a host.
Last updated
How you can run certain code on only the server, or only a client, or only on a host.
Last updated
Very often your code will need to know if it's running on a server or a client, or both at the same time. There are several ways of knowing this, for example, code executed directly from client or server only events or methods, checking compiler directives to see the type of game build, marking methods to only allow running on a specific instance, or simply checking a Boolean value.
You can easily check if the current code is running on the server with a Boolean check. FishNet's and classes have easy to use properties for this exact reason. They are also accessible from the directly.
You can use IsClientStarted
to detect if the instance running the code is a client. It could also be a server.
IsClientOnlyStarted
can be used to detect if the instance running the code is a client only and not a server.
IsServerStarted
detects if the instance running the code is the server. It could also be a client.
And finally, IsServerOnlyStarted
returns whether the instance running the code is a server only and not a client.
There are a variety of attributes which can be used to ensure a method only runs on the appropriate game instance.
These methods are also used for Fish-Networking Pro's automatic code stripping. Importantly, methods marked with the Server
attribute will have their method body stripped from non server builds.
Placing a Client
attribute above a method ensures that the method cannot be called unless the local client is active (and optionally additionally the NetworkObject is initialized). There are additional properties which may be added to the attribute for additional functionality.
The Server
attribute provides similar features of the Client
variant, except will not allow the method to run if the server is not active (and optionally additionally the NetworkObject is initialized).