2017-06-04 2 views
0

Actuellement, je travaille sur un jeu de plateforme 2d en réseau. J'ai un script qui est supposé instancier le jetpack des joueurs appelé JetpackManager. Cependant, lorsque le joueur est créé dans la scène, le code ne fait apparaître qu'un jetpack dans la scène des hôtes et non dans les scènes des clients. Il en résulte que seule la scène des hôtes fonctionne correctement alors que tous les joueurs dans les scènes des clients n'ont pas de jetpacks. Ceci est mon code pour le JetpackManager:ClientRpc Fonction non exécutée sur tous les clients dans Unity3d 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); 
} 

}

Donc, essentiellement, mon problème est que le code dans la fonction RpcEquipJetpack est pour quelque raison que d'être appelé sur l'hôte et non sur l'un des clients.

+0

Chaque client doit avoir JetpackManager dans sa scène pour appeler cette fonction. – Fiffe

+0

une erreur? ou connectez-vous reçu? –

Répondre

0

Vous devez instancier objet réseau avec classe réseau

Network.Instantiate

réseau instancier un bâtiment préfabriqué.

Le préfabriqué donné sera affiché sur tous les clients du jeu. La synchronisation est automatiquement configurée, donc il n'y a pas de travail supplémentaire impliqué. La position, la rotation et le numéro de groupe de réseau sont donnés en tant que paramètres . Notez que dans l'exemple ci-dessous, il doit y avoir quelque chose de défini dans playerPrefab dans l'éditeur. Vous pouvez en savoir plus sur les instanciations dans la référence d'objet Object.Instantiate.