2017-06-04 2 views
0

Momentan arbeite ich an einem vernetzten 2d Platformer Spiel. Ich habe ein Skript, das den JetpackManager des Jetpacks des Spielers instanziieren soll. Wenn der Spieler jedoch in die Szene hineingespawnt wird, erzeugt der Code nur ein Jetpack in der Host-Szene und nicht in den Szenen der Kunden. Dies führt dazu, dass nur die Host-Szene ordnungsgemäß funktioniert, während alle Spieler in den Szenen der Kunden keine Jetpacks haben. Dies ist mein Code für die JetpackManager:ClientRpc Funktion wird nicht auf allen Clients in Unity3d ausgeführt. C#

using UnityEngine; 
using UnityEngine.Networking; 

public class JetpackManager : NetworkBehaviour { 

[SerializeField] 
private Jetpack[] jetpacks; 

[SerializeField] 
private Transform jetPackHold; 

private PlayerController playerController; 

private Jetpack currentJetpack; 

void Start(){ 
    playerController = GetComponent<PlayerController>(); 

    if (isLocalPlayer) { 
     CmdEquipJetpack (0); 
    } 
} 

[Command] 
void CmdEquipJetpack(int jetpackNumber){ 
    RpcEquipJetpack (jetpackNumber); 
} 

[ClientRpc] 
void RpcEquipJetpack(int jetpackNumber){ 

    if (currentJetpack != null) { 
     Destroy (currentJetpack.gameObject); 
    } 

    currentJetpack = Instantiate (jetpacks[jetpackNumber], jetPackHold.position, jetPackHold.rotation); 
    currentJetpack.transform.SetParent (jetPackHold); 

    playerController.InitialiseJetpackVariables (currentJetpack); 
} 

}

So im Wesentlichen mein Problem ist, dass der Code innerhalb der RpcEquipJetpack Funktion aus irgendeinem Grund ist nur auf dem Host und nicht auf einem der Clients aufgerufen werden.

+0

Jeder Client muss JetpackManager in seiner Szene haben, um diese Funktion aufrufen zu können. – Fiffe

+0

irgendein Fehler? oder protokollieren Sie erhalten? –

Antwort

0

Sie sollten Objekt Netzwerk mit Netzwerkklasse instanziiert

Network.Instantiate

Netzwerk ein Fertig instanziiert.

Das angegebene Prefab wird auf allen Clients im Spiel angezeigt. Die Synchronisation wird automatisch eingerichtet, so dass keine zusätzliche Arbeit erforderlich ist beteiligt. Die Position, Rotation und Netzwerkgruppennummer werden als Parameter angegeben. Beachten Sie, dass im folgenden Beispiel etwas auf dem playerPrefab im Editor gesetzt sein muss. Sie können mehr über Instanziierungen in der Objektreferenz Object.Instantiate lesen.

Verwandte Themen