2016-08-07 34 views
0

Ich habe einen Würfel in meinem Spiel, der zwischen seinem ursprünglichen Zustand und einem größeren Zustand beim Betrachten eines anderen Objekts liegt. Dies funktioniert im Einzelspieler-Modus, aber wenn ich es in den Multiplayer-Modus übertrage, kann ich nicht die richtige Kombination von Optionen finden, um es auf beiden Clients zu aktualisieren (einer davon ist der Host). Jeder Spieler kann seinen eigenen Würfel noch aktivieren, wird aber nicht auf dem anderen Rechner dargestellt. Das Skript befindet sich auf der Schaltfläche mit einer Netzwerkidentität und greift auf den Cube zu, der ebenfalls eine Netzwerkidentität und eine Netzwerktransformation aufweist.Nicht-Spieler-Objekttransformation synchronisieren, die von einem anderen interagierbaren Objekt in Unet/Unity 5 geändert wurde?

Einzelspieler Referenz-Code:

void Update() { 

    if (Camera.main != null) { 
     RaycastHit hit; 
     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
     if (Physics.Raycast(ray, out hit)) { 
      if (hit.collider.gameObject == gameObject && hit.distance < 5) { 
       PlatformScale(); 
      } else { 
       PlatformReset(); 
      } 
     } 
    } 
} 

void PlatformScale() { 
    platform.transform.localScale = Vector3.Lerp (platform.transform.localScale, platformScale, 3f * Time.deltaTime); 
} 
void PlatformReset() { 
    platform.transform.localScale = Vector3.Lerp (platform.transform.localScale, platformStartingScale, 3f * Time.deltaTime); 
} 

Antwort

0

Nur für den Fall haben Sie nicht schon durchlesen, ich sehr empfehlen die gehen durch Unity Networking Manual

Ich schlage vor, mit [Befehl] oder [ClientRpc] (abhängig davon, welche Objekte sich auf dem Server befinden und welche lokal sind), um die Skalen zu lesen.

Obwohl Sie sie möglicherweise nicht benötigen, da Sie Netzwerktransformationen haben. Stellen Sie sicher, dass Sie den Cube im Netzwerk ordnungsgemäß spawned/instantiated haben.

Edit: Um den Würfel im Netzwerk laichen ...

using UnityEngine; 
using UnityEngine.Networking; 

public class CubeStuff : NetworkBehaviour { 

    public GameObject cubePrefab; 
    public GameObject cube; 
    public override void OnStartServer() { 
     GameObject cubeSpawn = (GameObject)Instantiate(cubePrefab, transform.position, transform.rotation); 
     NetworkServer.Spawn(cubePrefab); 
    } 
} 

JEDOCH: Nach der Dokumentation, brauchen Sie nicht so lange das Objekt laichen zu vernetzen, wie es in the scene ist, als dies für die Handhabung Sie - so liegt Ihr Problem woanders.

Ich habe nicht genug Informationen, um wirklich zu wissen, was Sie eingerichtet haben. Ihre Schaltflächen und UI können ein Objekt in der Szene sein, stellen Sie einfach sicher, dass die lokale Player-Berechtigung aktiviert ist und dass ihre OnClick() Referenzen [Command] Funktionen aufrufen.

+0

Das Objekt wird nicht instanziiert, muss es funktionieren? Ich habe es gerade in der Szene. Ich habe das Handbuch durchgelesen, aber ich kann nichts finden, was das Aktualisieren von Transformationen auf Nicht-Player-Objekten betrifft, die von einem anderen Gerät gesteuert werden. Wenn Sie ein direktes haben, das mir helfen würde, wäre das großartig. –

+0

Es sollte funktionieren, indem Sie es einfach laichen ... Im Handy entschuldige mich für die schreckliche Formatierung. Kannst du versuchen, der Szene ein leeres Spielobjekt hinzuzufügen, füge ein Skript hinzu: 'public GameObject cubePrefab; öffentliche Überschreibung void OnStartServer() {NetworkServer.Spawn (cubePrefab); } 'Sie müssen ein Prefab Ihres Cubes erstellen und dieses Prefab für die spawnbaren Objekte Ihres Netzwerkmanagers registrieren und es in den cubePrefab-Slot im Inspector für das obige Skript ziehen. Versuchen Sie dann, mit Ihrem Würfel zu interagieren und zu mir zurück zu kommen. Wenn Sie bestätigen können, dass das nicht funktioniert, kann ich Ihnen mehr helfen. – Wafer

+0

Hallo ich werde nicht in der Lage sein, ein paar Stunden zu testen, danke für die Hilfe. Nur so habe ich eine Idee, warum muss das Objekt erzeugt werden, um innerhalb des Spiels geändert zu werden, und muss ich das Skript, das sich auf dem separaten Knopf befindet, zum Spieler bewegen, oder muss dieses Objekt auch erzeugt werden? –

0

Also nach viel Suche habe ich herausgefunden, dass Sie nicht in LocalScale in Unet synchronisieren können, es ist ein außergewöhnlicher Fehler. Ich habe meinen Code geändert, um die Position anstelle der lokalen Skalierung zu verwenden. Danke für die Hilfe.