[Resolu]Photon Jeu Multiplayer avec AI
Re: Photon Jeu Multiplayer avec AI
Bon ok merci, je vais voir ça.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
Re: Photon Jeu Multiplayer avec AI
Oui, je spawn mon player au moment de la connexion du joueur, mais je ne vois pas comment je peux faire autrement pour affecter ce player à ce joueur.
Je suis débutant dans ce genre et j'avoue que je plane complètement et je n'arrive pas à trouver un tuto qui pourrait me guider.
Je suis débutant dans ce genre et j'avoue que je plane complètement et je n'arrive pas à trouver un tuto qui pourrait me guider.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
Re: Photon Jeu Multiplayer avec AI
Bon, va falloir mettre en place un lexique commun clair :
- Joueur => l'humain derrière la manette
- IA => Script
- Player => Script/Prefab instancié au moment où un joueur se connecte
- Avatar => GameObject représentant l'avatar 3D dans la scène
Ce sont 4 entités bien distinctes
Imaginons que tu lances une partie avec 4 IA, tu vas donc instancier 4 scripts/prefabs d'IA et 4 prefabs d'avatar.
Dès qu'un joueur va se connecter, tu vas instancier son prefab "Player", mais ce prefab ne doit PAS être le prefab du personnage 3D.
ça doit être un prefab qui ne contient que des scripts.
Donc là, le joueur est connecté, mais on ne lui a pas encore donné la permission de jouer ! Il n'est qu'observateur.
Lorsque tu veux que le joueur puisse prendre le contrôle d'un avatar dans la scène, c'est uniquement à ce moment là que tu dois faire la liaison entre le script du prefab Player et le script d'un avatar (actuellement contrôlé par une IA).
Le script du Player va alors pouvoir envoyer des ordres à l'avatar pour lui indiquer la direction dans laquelle se déplacer ou l'action à effectuer.
J'espère que c'est un peu plus clair comme ça...
- Joueur => l'humain derrière la manette
- IA => Script
- Player => Script/Prefab instancié au moment où un joueur se connecte
- Avatar => GameObject représentant l'avatar 3D dans la scène
Ce sont 4 entités bien distinctes
Imaginons que tu lances une partie avec 4 IA, tu vas donc instancier 4 scripts/prefabs d'IA et 4 prefabs d'avatar.
Dès qu'un joueur va se connecter, tu vas instancier son prefab "Player", mais ce prefab ne doit PAS être le prefab du personnage 3D.
ça doit être un prefab qui ne contient que des scripts.
Donc là, le joueur est connecté, mais on ne lui a pas encore donné la permission de jouer ! Il n'est qu'observateur.
Lorsque tu veux que le joueur puisse prendre le contrôle d'un avatar dans la scène, c'est uniquement à ce moment là que tu dois faire la liaison entre le script du prefab Player et le script d'un avatar (actuellement contrôlé par une IA).
Le script du Player va alors pouvoir envoyer des ordres à l'avatar pour lui indiquer la direction dans laquelle se déplacer ou l'action à effectuer.
J'espère que c'est un peu plus clair comme ça...
Re: Photon Jeu Multiplayer avec AI
Ah ok, merci, je vais essayer de respecter le lexique.
Je vais essayer de mettre en place ce que tu m'as expliqué.
En tout cas je te remercie de l'aide et la patience que tu m'accordes.
Comme je le pensais, c'est pour mettre en relation le player et l'avatar que j'ai des problèmes.
Quand le premier joueur se connecte j'instancie les avatars et le player concernant ce joueur.
Pas de problème jusque là pour associer le player et un des avatars.
Mais quand le 2ème joueur se connecte j'instancie son player, mais je n'arrive pas à mettre en relation un des autres avatars, je n'arrive pas à avoir accès à la liste des avatars crées plus tôt.
Il y a quelque chose que je ne comprends pas.
Voila le code que j'utilise
Je vais essayer de mettre en place ce que tu m'as expliqué.
En tout cas je te remercie de l'aide et la patience que tu m'accordes.
Comme je le pensais, c'est pour mettre en relation le player et l'avatar que j'ai des problèmes.
Quand le premier joueur se connecte j'instancie les avatars et le player concernant ce joueur.
Pas de problème jusque là pour associer le player et un des avatars.
Mais quand le 2ème joueur se connecte j'instancie son player, mais je n'arrive pas à mettre en relation un des autres avatars, je n'arrive pas à avoir accès à la liste des avatars crées plus tôt.
Il y a quelque chose que je ne comprends pas.
Voila le code que j'utilise
Code : Tout sélectionner
void OnJoinedRoom()
{
//le nombre de joueurs connectés -1 me donnera l'avatar et le player à sélectionner
int n = PhotonNetwork.playerList.Length - 1;
//Si c'est le premier joueur qui se connecte
if (PhotonNetwork.isMasterClient)
{
//Instancie les Avatars
avatars = new List<GameObject>();
avatars.Add(PhotonNetwork.Instantiate("Prefabs/" + Avatars[0].name, Avatars[0].transform.position, Avatars[0].transform.rotation, 0, null) as GameObject);
avatars.Add(PhotonNetwork.Instantiate("Prefabs/" + Avatars[1].name, Avatars[1].transform.position, Avatars[1].transform.rotation, 0, null) as GameObject);
avatars.Add(PhotonNetwork.Instantiate("Prefabs/" + Avatars[2].name, Avatars[2].transform.position, Avatars[2].transform.rotation, 0, null) as GameObject);
avatars.Add(PhotonNetwork.Instantiate("Prefabs/" + Avatars[3].name, Avatars[3].transform.position, Avatars[3].transform.rotation, 0, null) as GameObject);
//instancie le premier player
GameObject player = PhotonNetwork.Instantiate("Prefabs/" + Players[n].name, Vector3.zero, Quaternion.identity, 0) as GameObject;
//associe le player et l'avatar
player.GetComponent<Player>().Avatar = avatars[0];
player.GetComponent<Player>().CommandePC = false;
}
else
{
//Instancie les autres player au fur et à mesure d'une nouvelle connexion
GameObject player = PhotonNetwork.Instantiate("Prefabs/" + Players[n].name, Vector3.zero, Quaternion.identity, 0) as GameObject;
//LA CA COINCE : LA LISTE DES AVATARS EST NULLE, PAS D'ASSOCIATION PLAYER/AVATAR POSSIBLE
//ça me parait normal ils ont été créés sur une autre machine
//Je n'arrive pas à trouver comment faire pour régler ce problème
player.GetComponent<Player>().Avatar = avatars[n];
player.GetComponent<Player>().CommandePC = false;
}
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
Re: Photon Jeu Multiplayer avec AI
J'ai trouve PunRPC qui, je pense me permet d'avoir accès au avatars. Mais quand je veux affecter l'avatar au player les champs Avatar des scripts Player reste null.
j'avoue que je commence à me lasser de ces heures de recherche et je n'arrive pas à trouver un tuto pouvant m'aider. Heureusement qu'Alesk m'a permis d'avancer d'un pas. Merci à lui.
j'avoue que je commence à me lasser de ces heures de recherche et je n'arrive pas à trouver un tuto pouvant m'aider. Heureusement qu'Alesk m'a permis d'avancer d'un pas. Merci à lui.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
Re: Photon Jeu Multiplayer avec AI
Ta liste "avatars", elle est déclarée où exactement ?
Re: Photon Jeu Multiplayer avec AI
"avatars" est déclarée dans le script où il y a la fonction "OnJoinedRoom()".
Mon script à un peu évolué :
Et dans le script "Player" j'ai:
J'espère qu'il a évolué dans le bon sens..
Dans cette situation au premier joueur connecté tout va bien, la player commande l'avatar, le champ "_avatar" du script "player" contient "Avatar[0]" comme prévu.
Quand le 2ème joueur se connecte le champ "_avatar" des 2 scripts "player" sont tous les deux nulls.
J'ai essayé je crois toutes les combinaisons de PlayerTargets et j'ai essayé aussi sans "if (PhotonNetwork.isMasterClient)".
Je n'arrive pas à comprendre.
Mon script à un peu évolué :
Code : Tout sélectionner
public GameObject[] Avatars;
public GameObject[] Players;
internal List<GameObject> avatars;
void OnJoinedRoom()
{
//le nombre de joueurs connectés -1 me donnera l'avatar et le player à sélectionner et
int n = PhotonNetwork.playerList.Length - 1;
if (PhotonNetwork.isMasterClient)
{
//Instancie les Avatars
avatars = new List<GameObject>();
avatars.Add(PhotonNetwork.Instantiate("Prefabs/" + Avatars[0].name, Avatars[0].transform.position, Avatars[0].transform.rotation, 0, null) as GameObject);
avatars.Add(PhotonNetwork.Instantiate("Prefabs/" + Avatars[1].name, Avatars[1].transform.position, Avatars[1].transform.rotation, 0, null) as GameObject);
avatars.Add(PhotonNetwork.Instantiate("Prefabs/" + Avatars[2].name, Avatars[2].transform.position, Avatars[2].transform.rotation, 0, null) as GameObject);
avatars.Add(PhotonNetwork.Instantiate("Prefabs/" + Avatars[3].name, Avatars[3].transform.position, Avatars[3].transform.rotation, 0, null) as GameObject);
//instancie le premier player
GameObject player = PhotonNetwork.Instantiate("Prefabs/" + Players[n].name, Vector3.zero, Quaternion.identity, 0) as GameObject;
player.GetComponent<Player>()._avatar = avatars[0];
}
else
{
//Instancie les autres players au fur et à mesure d'une nouvelle connexion
GameObject player = PhotonNetwork.Instantiate("Prefabs/" + Players[n].name, Vector3.zero, Quaternion.identity, 0) as GameObject;
PhotonView view = player.GetComponent<PhotonView>();
view.RPC("AssocieAvatar", PhotonTargets.All, view.viewID, n);
}
}
Code : Tout sélectionner
public GameObject _avatar;
[PunRPC]
void AssocieAvatar(int viewid, int index)
{
if (PhotonNetwork.isMasterClient)
{
//C'est dans NetworkHolder qu'il y a ma liste des "avatars". (ne pas tenir compte de la petite faute dans "NetwordHolder")
NetworkHolder _networkHolder = GameObject.Find("NetwordHolder").GetComponent<NetworkHolder>();
GameObject player = PhotonView.Find(viewid).gameObject;
player.GetComponent<Player>()._avatar = _networkHolder.avatars[index];
}
}
Dans cette situation au premier joueur connecté tout va bien, la player commande l'avatar, le champ "_avatar" du script "player" contient "Avatar[0]" comme prévu.
Quand le 2ème joueur se connecte le champ "_avatar" des 2 scripts "player" sont tous les deux nulls.
J'ai essayé je crois toutes les combinaisons de PlayerTargets et j'ai essayé aussi sans "if (PhotonNetwork.isMasterClient)".
Je n'arrive pas à comprendre.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
Re: Photon Jeu Multiplayer avec AI
Ta liste d'avatars ne semble être mise à jour que du côté du serveur, je pense que ça vient de là.
Essaye une autre approche :
Au lieu d'ajouter les avatars dans la liste globale depuis ton script networkhandler, fait cet ajout depuis l'init du script des avatars.
Ainsi chaque fois que tu spawn un avatar, il s'ajoutera de lui-même à la liste, peu importe que ça se passe sur le serveur ou le client.
Et idem pour un joueur, déclenche l'association à un avatar dans l'init de chaque player, plutôt que dans ton networkhandler.
Pour y accéder plus facilement depuis n'importe quel script, il faudra peut-être que tu fasses des fonctions et des variables statiques dans ta classe networkhandler pour gérer ça.
Essaye une autre approche :
Au lieu d'ajouter les avatars dans la liste globale depuis ton script networkhandler, fait cet ajout depuis l'init du script des avatars.
Ainsi chaque fois que tu spawn un avatar, il s'ajoutera de lui-même à la liste, peu importe que ça se passe sur le serveur ou le client.
Et idem pour un joueur, déclenche l'association à un avatar dans l'init de chaque player, plutôt que dans ton networkhandler.
Pour y accéder plus facilement depuis n'importe quel script, il faudra peut-être que tu fasses des fonctions et des variables statiques dans ta classe networkhandler pour gérer ça.
Re: Photon Jeu Multiplayer avec AI
Bon hé bien je suis désolé, je tourne en rond.
Je crains que ça dépasse mes capacités.
A savoir que je suis autodidacte, que je n'ai jamais eu de formation de quelque sorte que ce soit dans ce domaine.
Je crois, et à regret, que je vais abandonner l'idée de créer l'IA pour les player absent.
C'est dommage car quand il n'y a qu'un seul joueur c'est pratiquement sans intérêt.
En tout cas, merci Alesk de l'aide que tu as essayé de m'apporter, et d'autant plus que tu as été le seul.
Encore merci et bonne continuation.
Je crains que ça dépasse mes capacités.
A savoir que je suis autodidacte, que je n'ai jamais eu de formation de quelque sorte que ce soit dans ce domaine.
Je crois, et à regret, que je vais abandonner l'idée de créer l'IA pour les player absent.
C'est dommage car quand il n'y a qu'un seul joueur c'est pratiquement sans intérêt.
En tout cas, merci Alesk de l'aide que tu as essayé de m'apporter, et d'autant plus que tu as été le seul.
Encore merci et bonne continuation.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
Re: Photon Jeu Multiplayer avec AI
Tu vas me faire le plaisir de remonter en selle immédiatement !
Ce n'est pas si compliqué
Un peu de persévérance ! (moi aussi je suis autodidacte... mais j'ai commencé la prog il y a 30 ans )
Ce n'est pas si compliqué
Un peu de persévérance ! (moi aussi je suis autodidacte... mais j'ai commencé la prog il y a 30 ans )