Wie synchronisiere ich GameObject-Eigenschaften von Nicht-Spielern in UNet / Unity5?

Ich arbeite an einigen Grundlagen von Unity 5, UNET und Networking und lerne sie. Ich habe ein einfaches 3D-Spiel erstellt, in dem Sie herumgehen und die Farben von Objekten ändern. Aber ich möchte es jetzt zum Multiplayer-Modus machen und habe große Probleme damit, die Änderungen über das Netzwerk zu senden, damit alle Spieler die Farbänderung eines einzelnen Spielers sehen können.

Teil des Problems ist, dass es schwierig war, die Antwort mit der neueren UNET-Netzwerk-Engine zu finden. Und manchmal stoße ich auf Antworten, die älter sind.

Die Hauptfrage ist also, wie ich Änderungen an den GameObject-Eigenschaften von Nicht-Spielern vernetze. Farbe, Form, Größe usw ..

Hier ist ein Code, den ich jetzt habe - und ich hatte viele verschiedene Versionen, daher werde ich nur die aktuelle veröffentlichen:

 using UnityEngine;
 using System.Collections;
 using UnityEngine.Networking;

 public class Player_Paint : NetworkBehaviour {

     private int range = 200;
     [SerializeField] private Transform camTransform;
     private RaycastHit hit;
     [SyncVar] private Color objectColor;
     [SyncVar] private GameObject objIdentity;

     void Update () {
         CheckIfPainting();
     }

     void CheckIfPainting(){
         if(Input.GetMouseButtonDown(0)) {
             if (Physics.Raycast (camTransform.TransformPoint (0, 0, 0.5f), camTransform.forward, out hit, range)) {
                 string objName = hit.transform.name;
                 CmdPaint(objName);
             }
         }
     }

     [ClientRpc]
     void RpcPaint(){
         objIdentity.GetComponent<Renderer>().material.color = objectColor;
     }

     [Command]
     void CmdPaint(string name) {
         objIdentity = GameObject.Find (name);  //tell us what was hit
         objectColor = new Color(Random.value, Random.value, Random.value, Random.value);
         RpcPaint ();
     }
 }

Ich habe eine Reihe weiterer Lösungen ausprobiert, darunter das Schreiben eines separaten Skripts für die Objekte, deren Farbe ich ändern möchte, und das Einschließen von [SyncVar] und Hook-Funktionen. Ich habe auch Debug.Log für jede der Funktionen ausprobiert, von denen ich erwarte, dass sie die Objekte auf den Clients aktualisieren und sie mit den erwarteten Daten ausführen.

Ich weiß wirklich nicht, was ich sonst tun soll. Ich denke, es ist eine SEHR einfache Sache, die ich tun möchte, aber ich bin nicht auf die Synchronisierung von GameObjects von Nicht-Spielern in Fragen, Tutorials oder anderen Ressourcen gestoßen. Irgendwelche Ideen überhaupt wären hilfreich, danke.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage