J'imagine que vous avez très probablement déjà vu ce message d'erreur, que j'ai utilisé comme titre de mon sujet.
Avant de venir poster ici j'ai fais le tour des forums sans trouver de solution à mon problème.
Dans un premier lieu, j'ai la fonction suivante où l'argument Neighboors est un List.<Collider> dans lequel sont stockés les Collider issus d'un : Physics.OverlapSphere(this.transform.position, 5)
Pas directement toutefois, au travers une boucle je ne récupère que les Colliders dont le Tag m'intéresse, et les dispose dans ma Liste "Neighboors". (qui s'écrit normalement neighbour mais je préfère avec deux o.=)
Code : Tout sélectionner
function AskForCrowd(Neighboors) {
if(!CrowdAsked)
{
CrowdAsked = true; //Evite que la création de plusieurs foules soit demandée simultanément.
var KeptIndividuals : List.<Collider> = new List.<Collider>(); //Liste contenant tous les individus destinés à appartenir à cette foule.
Debug.Log("SBM : crowd asked");
Debug.Log("SBM : First neighboor before testing : " + Neighboors[0]);
KeptIndividuals = TestNeighboors(Neighboors,KeptIndividuals);
}
else
{
Debug.Log("SBM : one crowd at a time !");
}
}
Code : Tout sélectionner
function TestNeighboors(Neighboors,KeptNeighboors){
var found : boolean = false;
Debug.Log("SBM : first Neighboor :" + Neighboors[0] );
//Debug.Log("SBM : Kepts length :" + Kepts.Count);
if((KeptNeighboors as List.<Collider>).Count == 0) //Si la liste des voisins connectés est vide, il est inutile de vérifier si les nouveaux voisins sont présents dans cette liste.
{
KeptNeighboors = Neighboors; //La liste des voisins connectés récupère tous les voisins proposés.
}
else //Sinon, il faut regarder pour chaque Neighboors, si ils appartiennent déjà à KeptNeighboors ou non.
{
//Kepts.Concat(KeptNeighboors);
for(var Indiv : Collider in Neighboors) //Pour chaque individu dans Neighboors...
{
found = false; //...Considéré qu'il n'est pas trouvé
for(var i : int = 0; i < (KeptNeighboors as List.<Collider>).Count; i++) //Pour chaque voisin
{
if(Indiv.GetInstanceID() == KeptNeighboors[i].GetInstanceID()) //Si l'individu testé est présent dans la liste des individus gardés
{
found = true; // alors il a déjà été trouvé, ne pas s'en occuper donc.
i = (KeptNeighboors as List.<Collider>).Count; //Travail de porc, permet de ne pas perdre de temps dans la boucle à vérifier les autres voisins.
}
if(found == false) //Sinon
{
(KeptNeighboors as List.<Collider>).Add(Indiv); //Le rajouter à la liste des individus gardés
Debug.Log("SBM : IndivAsked"); //Indique qu'un individu a été rajouté.
}
}
}
}
Debug.Log("SBM : first of Kepts :" + KeptNeighboors[0]);
return KeptNeighboors;
}
En l'état, rien ne marche ; mais c'est pas tellement le soucis ;
la ligne : if(Indiv.GetInstanceID() == KeptNeighboors.GetInstanceID())
m'engendre l'erreur : Assets/SBM/SBM.js(163,61): BCE0048: Type 'Object' does not support slicing.
J'ai trouvé de nombreuses explications : c'est parce que Unity croit que je fais mal, c'est parce que j'utilises des Array (alors je suis passé aux Lists), c'est parce que il y a #Pragma Strict en haut de ton code...
Certes, sans le Pragma strict je n'ai pas d'erreur à la compile, mais j'aimerai mieux résoudre le problème d'une façon plus formelle si possible.
Est-ce possible ? Qu'est ce que j'ai encore fais comme connerie ? =)
P.S: toute erreur/maladresse dans mon code est bien entendu ouverte à la critique et aux suggestions.
Encore merci,
Fab.