Habe eine Unity 3D Network frage?

... komplette Frage anzeigen

1 Antwort

Das kannst du ganz bequem in der Unity Dokumentation nachgucken. Auf  Youtube gibt es ganz viele sehr gute Tutorials dazu, aber ich helfe gerne von daher...:)

Also erstmal musst du in deinem Code den Namespace "UnityEngine.Networking" von Unity importieren, sonst kannst du auf die oben genannten Attribute gar nicht zugreifen.

using UnityEngine.Networking;

[SyncVar] kannst du vor einer Variable definieren. Machst du dies, so funktioniert diese Variable als SyncVar. Das bedeutet, dass diese über den Host (Server) auf allen Clients automatisch geupdatet wird. Sobald sich die Variable auf dem Server ändert, ändert sich die Variable auch auf den Clients. Das funktioniert natürlich nur bei einer bereits bestehenden erfolgreichen Verbindung (d.h. ein Client ist dem Host beigetreten). Ändert sich die Variable auf einem Client, so ändert sich diese nicht bei anderen Clients und dem Server. D.h. eine SyncVar sollte immer auf dem Server/Host geändert werden.

[Command] schreibt man immer vor eine Command-Funktion. Eine Command Funktion ist eine Funktion die auf dem Client aufgerufen werden kann, aber dann auf dem Server ausgeführt wird. Dabei muss das gleiche Script auf dem Server Objekt und auf dem Client Objekt vorhanden sein. Du hast z.B. ein Spieler Objekt mit einem Script. Das Spieler Objekt befindet sich auf dem lokalen Client, wird beim Verbinden mit dem Server aber ebenfalls dort gespawnt. Das heißt, Client und Server haben das gleiche Spieler Objekt geladen und somit befindet sich auf beidem das Script. Dies kann so aussehen:


public void RespawnPlayer() //Kann z.B vom einem Button aufgerufen werden, den der Client drückt
{
int irgendeineZahl = 10;
//Dieser Code wird auf dem Client aufgerufen
CmdAufDemServer(irgendeineZahl);
}

[Command]
void CmdAufDemServer(int irgendEineZahl)
{
//Methode wird auf dem Server aufgerufen
Debug.Log(irgendeineZahl);
}

Die Methode RespawnPlayer kann z.B. von einem Button auf dem Client aufgerufen werden. In dem Fall ein respawn-button. Die Methode ruft dann die CmdAufDemServer auf, der Client sendet den Aufruf an den Server und auf dem Server (Spieler Objekt) wird die Methode respawn dann ausgeführt. Dabei können auch Parameter z.B. eine Integer übergeben werden.

Wichtig ist, dass die Command-Methode mit dem Präfix "Cmd" versehen wird.

[ClientRPC] wird vor einer ClientRPC-Methode geschrieben. Diese Methode muss den Präfix "Rpc" haben. Die Methode wird auf dem Server aufgerufen und dann auf allen Clients ausgeführt. Sozusagen das Gegenteil vom Command. So könnte der Server z.B. allen Clients mitteilen, dass ein Spieler respawnen soll.

Wenn du noch fragen hast kannst du gerne nachfragen, ansonsten viel Erfolg ;)

Liebe Grüße

Dosenbiiir

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von zantes
30.11.2016, 23:13

Danke dir für deine Hilfe wow ! :)) vielen dank!!

0

Was möchtest Du wissen?