Styxx83 Geschrieben 9. November 2016 Melden Share Geschrieben 9. November 2016 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.