Skip to content

Plugin Documentatie

DaanDuits edited this page Apr 2, 2025 · 4 revisions

Netcode for GameObjects

Netcode for GameObjects is de door Unity aangeraden plugin voor multiplayer. Voor dit project hebben we niet alle onderdelen van deze plugin nodig, maar de onderdelen die we wel gebruiken zijn hier gedocumenteerd.

NetworkManager

De NetworkManager is een singleton in de scene dat het netwerk beheerd. Het is een leeg GameObject met een NetworkManager script waarin je alle instellingen van het netwerken kan aanpassen. Ook staat er een Unity Transport script op. Dat wordt er automatisch voor je opgezet wanneer je de Network Transport property op het script wilt veranderen.

NetworkObjects

Een NetworkObject is een leeg GameObject met een NetworkObject script eraan. Dit zorgt ervoor dat het object genetwerkt wordt tussen meerdere clients.

Elk NetworkObject, of kinderen van het NetworkObject, heeft ook ten minste één NetworkBehaviour script. De volgorde van deze twee componenten is belangrijk. In de Inspector in Unity moet het NetworkObject component bovenaan staan, dus voor de NetworkBehaviour scripts.

NetworkBehaviours

Een NetworkBehaviour script is een script waarin de class overerft van de NetworkBehaviour class, in plaats van de MonoBehaviour class. De NetworkBehaviour class erft ook over van MonoBehaviour, dus standaard functies zijn nog steeds mogelijk.

In deze class wordt vaak ook OnNetworkSpawn() gebruikt. Deze functie wordt aangeroepen wanneer het NetworkObject ingespawned wordt. De "Order of Execution" verschilt dan wanneer het NetworkObject dynamisch ingespawned wordt of niet:

In-scene Geplaatst Dynamisch Ingespawned
Awake Awake
Start OnNetworkSpawn
OnNetworkSpawn Start
using Unity.Netcode;

public class NetworkedClassName : NetworkBehaviour
{
    public override void OnNetworkSpawn()
    {
        base.OnNetworkSpawn();
    }
}

NetworkVariables

NetworkVariables zijn speciale variabelen die automatisch gesynchroniseerd worden over het netwerk. Veranderingen van die variabelen kunnen gecheckt worden door op OnValueChanged te abonneren met een functie. Die functie krijgt dan 2 parameters voor de vorige waarde en de nieuwe (huidige) waarde.

Je kan in de NetworkVariables ook de lees/schrijf rechten aanpassen. Standaard zijn ze leesbaar voor iedereen en schrijfbaar voor alleen de server. Dit zijn de mogelijke rechten:

Lezen (NetworkVariableReadPermission) Schrijven (NetworkVariableWritePermission)
Everyone Server
Owner Owner
using Unity.Netcode;

public class NetworkedClassName : NetworkBehaviour
{
    private NetworkVariable<int> _networkedInteger = new(default, NetworkVariableReadPermission.Everyone, NetworkVariableWritePermission.Server);

    public override void OnNetworkSpawn()
    {
        base.OnNetworkSpawn();

        _networkedInteger.Value = 69;

        _networkedInteger.OnValueChanged += NetworkedIntegerChanged;
    }

    private void NetworkedIntegerChanged(int _previous, int _current)
    {

    }
}

Remote Procedure Calls (RPC's)

Scripts kunnen communiceren met andere clients en de server door RPC's aan te roepen. Dat zijn functies die over het netwerk gestuurd worden om op een andere plek uitgevoerd te worden.

RPC's worden gemaakt door een [Rpc()] attribute boven een functie te zetten, en door een Rpc navoegsel toe te voegen aan de method naam. In de attribute specificeer je waar de functie uitgevoerd moet worden:

  • SendTo.Server
  • SendTo.NotServer
  • SendTo.Authority
  • SendTo.NotAuthority
  • SendTo.Owner
  • SendTo.NotOwner
  • SendTo.Me
  • SendTo.NotMe
  • SendTo.Everyone
  • SendTo.ClientsAndHost
  • SendTo.SpecifiedInParams
using Unity.Netcode;

public class NetworkedClassName : NetworkBehaviour
{
    [Rpc(SendTo.Server)]
    private void RunOnServerRpc()
    {

    }
}

Clone this wiki locally