2017-01-12 2 views
0

J'essaye de changer de scène sur le réseau et je veux que chaque joueur charge localement la scène Async pour que tout le monde puisse avoir un écran de chargement. Je me bats avec les appels Command et RPC. Après les changements de scène, je voudrais réapparaître un nouveau joueur et l'associer au client.Respawn Player on Scene Changer

public void changeLevel(string name) 
{ 
    CmdChangeLevel(name); 
    //nm.ServerChangeScene(name); -> This doesnt change the scene Async 
} 

void changeScene(string name) 
{ 
    SceneManager.LoadScene(name); 

    //Stuff to re-Instantiate the player 
} 

[Command] 
void CmdChangeLevel(string name) 
{ 
    SceneManager.LoadScene(name); 
    RpcChangeLevel(name); 
} 

[ClientRpc] 
void RpcChangeLevel(string name) 
{ 
    changeScene(name); 
} 

Tout ce que j'ai essayé a donné lieu à un changement de scène, mais aucun joueur instancié, comme (nm = NetworkManager) nm.OnServerAddPlayer() et instancier fraient ensuite par le serveur. Aide serait très apprécié, merci d'avance

Répondre

0

Peut-être que vous avez besoin d'un gestionnaire de jeu statique avec DontDestroyOnLoad (DDOL)? Fondamentalement, ce que vous faites est:

1) Créer une scène et de le mettre d'abord dans votre ordre de construction de jeu (jeu pour la première charge à elle)

2) Créer un gameobject vide avec un script GameManager . Dans Start(), placez la méthode DontDestroyOnLoad.

3) Dans votre script, chargez votre « première » scène (menu principal ou écran de démarrage ou tout autre)

Cela fera l'objet que vous mettez votre DDOL-script pour rester même entre les changements de scène, donc vous pouvez gérer les écrans de chargement et les spawns des joueurs etc dans ce gameobject.

+0

Fondamentalement, ce que je veux savoir est de savoir comment générer manuellement le lecteur préfabriqué du gestionnaire de réseau. J'ai besoin que le client charge la scène localement et demande au serveur de réapparaître son joueur que vous connaissez? – Ay0m3