Sans plus de présentation, j'aimerais vous soumettre le problème qui me pousse à m'inscrire sur ce forum! Ca me travaille depuis quelques jours et je ne dirais pas non à un avis externe.
Tout d'abord, je souhaite préciser que je viens du monde Java et que mon travail sur Unity n'est qu'un hobby. Veuillez donc considérer toutes les réponses de noob qui vous viennent à l'esprit sans trop faire attention à la classification de ce message.
Voilà mon problème :
J'ai un CustomNetworkLobbyManager qui étend le NetworkLobbyManager.
Code : Tout sélectionner
CustomNetworkLobbyManager : NetworkLobbyManager
Pour voir le code originel de cette méthode, je me base sur ce lien :
https://bitbucket.org/Unity-Technol...a ... ew-default
Serais-ce peut-être ma première erreur? J'ai bien l'impression que c'est le repo officiel, mais peut-être en existe t'il un autre?
Normalement, à la fin de cette méthode, un nouveau LobbyPlayer est créé et ajouté au tableau des NetworkLobbyPlayer.
Je veux ensuite écrire un code basé sur ce nouveau joueur nouvellement ajouté au tableau.
J'écris donc :
Quand je lance mon serveur avec ce code et que "j'espionne" l'instance du tableau après l'appel à la fonction parente ("base") : toutes les valeurs du tableau sont à null.public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId) {
base.OnServerAddPlayer(conn, playerControllerId);
// Debug seulement présent pour faciliter l'inspection de l'instance du tableau via le mode debug de visual studio.
// A noter que la longueur du tableau de variera pas
Debug.Log(lobbySlots.Length);
// Code personnel ici
}
Si je diffère mon appel d'une milliseconde via la méthode "Invoke", une cellule de mon tableau est correctement remplie avec ma nouvelle instance de joueur.
Et si je choisi de ne pas appeler la fonction parente mais de plutôt recopier intégralité de son code dans ma propre fonction :
tout fonctionne parfaitement : une cellule de mon tableau est là encore correctement remplie avec ma nouvelle instance de joueur.
Ma question est donc la suivante : pourquoi? Que fais-je donc de mal? Ais-je une bonne utilisation du mot-clef "base" en C#?
J'ai l'impression que la réponse est vraiment stupide. Mais étant donné que certains comportement réseaux sont parfois quelque peu étonnant sous Unity; mon esprit a tendance à chercher des réponses plus complexes.
Merci beaucoup si par avance quelqu'un a le courage de me lire!