Jump to content
Unity Insider Forum

[UNET] ClientRpc wird nicht auf Host ausgeführt.


Recommended Posts

Hallo zusammen

 

ich hänge jetzt seit Tagen an einem Problem mit den ClientRpc's und hoffe ihr könnt mir helfen.

 

Folgend ein vereinfachter Auszug aus meinem Code:

 

 

// Auszug der Sync-Methoden der Karten-Klasse, welche auf dem Server instanziert und

// auf Clients gespawned wurde. Alle Karten werden mit LocalAuthority gespawned.

 

 

// Wird von einer GUI-Klasse angestoßen:

public void alterValue(int newValue)

{

CmdChangeValue(newValue);

}

 

[Command] public void CmdChangeValue(int newValue)

{

// Hier wird der entsprechende Server-Wert auf NewValue gesetzt

 

RpcChangeValue(newValue);

}

 

[ClientRpc] public void RpcChangeValue(int newValue)

{

// Hier wird der entsprechende Client-Wert auf NewValue gesetzt

}

 

 

 

Folgendes Szenario:

 

-----------------------------------------

 

Player A = Local Host

Player B = Remote Client

Player C = Remote Client

 

Jeder Player stößt bei OnStartLocalPlayer() einen Cmd zum erstellen einer Karte an.

 

Diese wird auf dem Server instanziert und danach auf den Clients gespawned.

 

Ausgangslage:

 

Jeder Client besitzt jetzt drei Kartenobjekte (Seine eigene und 2 Klone der anderen

Player)

 

Jetzt spielen wir mal einige Fälle für obigen Code:

 

 

Fall A:

Player A ändert den Wert seiner Karte

-> Änderung wird auf allen Clients durchgeführt -> OK

 

Fall B:

Player A ändert den Wert der Karte eines anderen Spielers

-> Änderung wird auf allen Clients durchgeführt -> OK

 

Fall C:

Player B ändert den Wert seiner Karte

-> Änderung wird auf allen Clients durchgeführt -> OK

 

Fall D:

Player B ändert den Wert der Karte von Player A

-> Änderung wird nur lokal bei Player B durchgeführt

-> Die [Command]-Methode wird nicht ausgeführt.

 

 

Was ist nun der Unterschied? Kann es daran liegen, dass

die Karten der Remote-Clients gespawned wurden und

alle Objekte des Servers/Hosts instanziert sind?

 

 

Hier noch ein kurzer Auszug wie die Karten erstellt werden:

 

 

[Command] private void CmdServerSpawnCard(string cardName)

{

NetworkServer.SpawnWithClientAuthority (spawnCard(cardName, parent, false, CARD_LOCATION.HAND), base.connectionToClient);

}

 

 

private GameObject spawnCard(string cardName, GameObject parent, bool worldPositionStays, CARD_LOCATION location)

{

GameObject go = (GameObject)Instantiate(

cardPrefab,

parent.transform.position,

parent.transform.rotation) as GameObject;

...

...

}

 

 

Auf der Suche nach einer Lösung bin ich bei DoktorGo schon auf einige interessante Sachen gestoßen, jedoch konnte mir nichts weiterhelfen.

 

z.B.: https://issuetracker...d-scene-objects

 

Danke schon mal im Voraus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...