Problème "GameObject.Find..." en multijoueur :(

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
WolfProg
Messages : 21
Inscription : 08 Nov 2014 11:31
Localisation : Nice

Problème "GameObject.Find..." en multijoueur :(

Message par WolfProg » 27 Avr 2015 17:37

Bonjour !

J'ai rencontrer un problème sur Unity :

J'ai créer un script "IA-Lapin" avec ce code-ci a l'intérieur :

Code : Tout sélectionner

var PosPlayer : Transform;
var DirectionPlayer : Vector3;
var findPlayer = false;
var controller : CharacterController;
var moveDirection : Vector3;
var noProblem = true;
var objectInfo: GameObject;

function Start () {
	PosPlayer = GameObject.Find("Wolf(Clone)").transform;
}

function Update () {
	if(DirectionPlayer.magnitude <= 10){
		findPlayer = true;
	}
	
}
Le script est attacher a une sphere appelé Lapin.
Le lapin spawn quand un serveur est lancé, donc en même temps que la map, ect.
Quand je m'approche du lapin, findPlayer est bien égale true.
Donc je décide de lancer le jeu en client et rejoindre le serveur, mais quand je m'approche du lapin (Sur le client et pas serveur) findPlayer reste toujours en false, tans dit que quand c'est celui qui a créer le serveur qui s'approche, findPlayer est égale a true.

Pouvait vous me dire pourquoi cela ne fonctionne pas ? Car je ne sais pas du tous comment résoudre ce problème ... :(

Merci d'avance de votre réponse.
Amicalement,
WolfProg :)

EDIT : J'ai déjà chercher sur de nombreux sites , même anglophone mais je n'ai pas trouver ce que je chercher...
Je me demande si il faut ajouter quelque chose avant ou après GameObject.Find pour trouver plusieurs object du même nom en multijoueur mais je n'ai pas trouver non-plus :/
Votre aide me serais bien précieuse ;)

castor_enrage
Messages : 14
Inscription : 28 Avr 2015 13:19

Re: Problème "GameObject.Find..." en multijoueur :(

Message par castor_enrage » 28 Avr 2015 13:39

Salut,

Si je comprend bien, tu a deux gameobjects "player", et le lapin ne vois que l'un des deux?
Si oui c'est ton DirectionPlayer qui dois pointer que sur ton premier player. Je Présume que tu lui donne une valeur quelque part d'autre. Alors la méthode qui me parait le plus simple est non pas d'avoir qu'un vector3, mais un array de vector3. Puis dans le start d'incrémenter ce tableau avec tout les players. Puis bien évidement de faire dans le update un foreach de l'array.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6228
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème "GameObject.Find..." en multijoueur :(

Message par boubouk50 » 28 Avr 2015 13:45

Le GameObject.Find() te renvoie seulement le premier GameObject qu'il trouve.
Tu peux utiliser GameObject.FindGameObjectsWithTag() pour récupérer tous les GameObject avec le tag recherché. Il faut donc que seuls tes persos aient ce Tag.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

castor_enrage
Messages : 14
Inscription : 28 Avr 2015 13:19

Re: Problème "GameObject.Find..." en multijoueur :(

Message par castor_enrage » 28 Avr 2015 14:05

Désoler, de te contredire boukou50, mais il dit que son problème c'est findPlayer qui ne devient pas true. Alors son problème selon moi viens de DirectionPlayer utiliser dans ce if:
function Update () {
if(DirectionPlayer.magnitude <= 10){
findPlayer = true;
}

}
Et comme on peux le voir DirectionPlayer n'est jamais défini. C'est pour ça que je présume qu'il lui a mis une valeur autre part.
J'ai peut être pas été assez clair dans mon précédent post, dsl.

Alors plus concrètement, a mains levé, ce que tu devrais faire c'est:

Code : Tout sélectionner

var PosPlayer : Transform;
var DirectionPlayer;
var findPlayer = false;
var controller : CharacterController;
var moveDirection : Vector3;
var noProblem = true;
var objectInfo: GameObject;

function Start () {
   PosPlayer = GameObject.Find("Wolf(Clone)").transform;
   DirectionPlayer = GameObject.FindGameObjectsWithTag("LeTagDesPlayers").transform.position;
}

function Update () {
  for (playerPosition in DirectionPlayer) {
      if(playerPosition.magnitude <= 10){
         findPlayer = true;
      }
  }
   
   
}

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Problème "GameObject.Find..." en multijoueur :(

Message par ZJP » 28 Avr 2015 14:30

castor_enrage a écrit :Désoler, de te contredire boukou50, mais il dit que son problème c'est findPlayer qui ne devient pas true. ...
Et tu le corriges en ajoutant une instruction complémentaire qui va dans son sens. Trop fort !!!

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6228
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème "GameObject.Find..." en multijoueur :(

Message par boubouk50 » 28 Avr 2015 14:30

Oui c'est sur, il y a plus d'un pb. Je mettais cette fonction en évidence pour récupérer une liste de joueurs.

S'il n'a qu'un lapin qui ne va chercher qu'un seul player au Start() alors il ne verra que le créateur du jeu, non? Puisque c'est le premier (et seul) player en jeu à ce moment là. Les autres joueurs seront zappés.

-EDIT- j'avais pas lu le code... effectivement tu as codé ce que je venais de dire :lol:. Mais comme je viens de le signaler plus haut, est-ce que tous les joueurs sont présents au Start()?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Problème "GameObject.Find..." en multijoueur :(

Message par ZJP » 28 Avr 2015 14:33

boubouk50 a écrit :Oui c'est sur, il y a plus d'un pb. Je mettais cette fonction en évidence pour récupérer une liste de joueurs.
+1. Les quelques lignes montrées n'auraient jamais permis de résoudre le problème.

castor_enrage
Messages : 14
Inscription : 28 Avr 2015 13:19

Re: Problème "GameObject.Find..." en multijoueur :(

Message par castor_enrage » 28 Avr 2015 14:42

Ta raison, ça ne marcherais pas dans le Start.

Alors il faudrait une façon de savoir quand tout les joueur son connecter. Mais avec le peux d'info qu'on a de son programme c'est un peu dure de dire exactement quoi faire, sans tout refaire le programme.

ZJP, j'ai dit ce que j'ai dit parce que je pensais qu'il c'était tromper, comme moi a la première lecture du post de l’auteur, avec le PosPlayer = GameObject.Find("Wolf(Clone)").transform;.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6228
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème "GameObject.Find..." en multijoueur :(

Message par boubouk50 » 28 Avr 2015 15:06

T'inquiètes, c'est pas la course à celui qui à tort ou raison.

Je proposerai que lors de l'entrée en jeu d'un nouveau player, celui-ci va chercher le Lapin pour lui remplir son tableau de joueur, et non pas le contraire qinon le lapin devra continuellement chercher les joueurs.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

castor_enrage
Messages : 14
Inscription : 28 Avr 2015 13:19

Re: Problème "GameObject.Find..." en multijoueur :(

Message par castor_enrage » 28 Avr 2015 15:25

Pas bête. Le seul problème c'est si un lapin est créé après que les joueurs ce sont connectés, mais dans ces cas la, faudrait que quand tu crée le lapin tu appelle ça fonction qu'y update ça liste de joueur.

Verrouillé

Revenir vers « (Js) Javascript »