Skip to content

t1k:unity:networking:netcode

FieldValue
Modulenetworking
Version2.1.7
Efforthigh
Tools

Keywords: multiplayer, netcode, networking, NGO

/t1k:unity:networking:netcode

Unity Netcode for GameObjects — Multiplayer Networking

Section titled “Unity Netcode for GameObjects — Multiplayer Networking”

NGO reference for Unity 6. Server-authoritative networking.

  1. Install com.unity.netcode.gameobjects via Package Manager
  2. Add NetworkManager to scene, set Unity Transport
  3. Mark spawnable prefabs with NetworkObject, register in NetworkManager
NetworkManager.Singleton.StartHost(); // Server + client
NetworkManager.Singleton.StartServer(); // Dedicated server
NetworkManager.Singleton.StartClient(); // Client only
NetworkManager.Singleton.Shutdown();
NetworkManager.Singleton.OnClientConnectedCallback += clientId => { };
NetworkManager.Singleton.OnClientDisconnectCallback += clientId => { };
public class PlayerController : NetworkBehaviour {
public override void OnNetworkSpawn() {
if (IsOwner) EnableInput();
if (IsServer) InitServerState();
}
// IsOwner, IsServer, IsClient, IsHost, IsLocalPlayer
}
public NetworkVariable<int> Health = new(100,
NetworkVariableReadPermission.Everyone,
NetworkVariableWritePermission.Server);
public override void OnNetworkSpawn() {
Health.OnValueChanged += (old, val) => UpdateHealthBar(val);
}
// Client → Server:
[ServerRpc]
void ShootServerRpc(Vector3 dir, ServerRpcParams rpcParams = default) {
ulong sender = rpcParams.Receive.SenderClientId;
SpawnProjectile(dir, sender);
OnShootClientRpc(dir);
}
// Server → All Clients:
[ClientRpc]
void OnShootClientRpc(Vector3 dir) { PlayShootVFX(dir); }
// Server → Specific Client:
var rpcParams = new ClientRpcParams {
Send = new ClientRpcSendParams { TargetClientIds = new[] { targetId } }
};
ShowMessageClientRpc("You win!", rpcParams);
GameObject obj = Instantiate(prefab, pos, rot);
obj.GetComponent<NetworkObject>().Spawn(); // Server-owned
obj.GetComponent<NetworkObject>().SpawnWithOwnership(clientId); // Client-owned
obj.GetComponent<NetworkObject>().Despawn(); // Remove

Add component to sync position/rotation/scale. Options: Interpolate, Authority (Server/Owner), Threshold.

  1. RPC naming: Must end with ServerRpc or ClientRpc suffix exactly
  2. Serialization: RPC params must be primitives or INetworkSerializable
  3. IsOwner in Awake: Not set — use OnNetworkSpawn() instead
  4. NetworkVariable init: Field declaration only, not constructor
  5. Prefab registration: All spawnable prefabs must be in NetworkManager list
  6. Single NetworkManager: Only one per scene (singleton)
  • unity-scene-management — Networked scene loading
  • unity-input-system — Client-side input prediction
  • unity-animation — NetworkAnimator sync
  • unity-profiling — Network perf analysis