/// <summary>
    /// C'est dans cette méthode qu'est implanté notre algorithme A*
    /// </summary>
    /// <param name="startPos">la position de notre tuile de départ</param>
    /// <param name="targetPos">la position de notre tuile d'arrivée</param>
    public void trouverChemin(Vector3 startPos, Vector3 targetPos)
    {    //on trouve les noeuds associés à nos positions
        Noeud noeudDepart  = grille.noeudVsPoint(startPos);
        Noeud noeudArrivee = grille.noeudVsPoint(targetPos);

        print("Je passe");

        List <Noeud> openList   = new List <Noeud> ();
        List <Noeud> closedList = new List <Noeud> ();

        openList.Add(noeudDepart);

        while (openList.Count > 0)                   //tant qu'il nous reste des noeuds à évaluer
        {
            Noeud noeudCourant = openList [0];       // on prend le premier noeud de la liste

            for (int i = 1; i < openList.Count; i++) //s'il y a plus d'un noeud dans la liste, on détermine celui au coût le plus bas
            {
                int fCost = openList [i].fCost();
                int hCost = openList [i].hCost;

                if (fCost < noeudCourant.fCost() || (fCost == noeudCourant.fCost() && hCost < noeudCourant.hCost))
                {
                    noeudCourant = openList[i];
                }
            }

            openList.Remove(noeudCourant);    //retire le noeud de la liste a évaluer
            closedList.Add(noeudCourant);     //on le rajoute dans la liste de ceux déjà évalué

            if (noeudCourant == noeudArrivee) //si nous avons trouvé la tuile d'arrivée
            {
                return;                       //on termine la fonction
            }
            else
            {
                List <Noeud> voisins = grille.retourneVoisins(noeudCourant);                //on trouve les voisins de notre noeud

                foreach (Noeud voisin in voisins)
                {
                    if (!voisin.walkable || closedList.Contains(voisin))                     //s'il n'est pas marchable ou s'il est déjà dans la closed list
                    {
                        continue;
                    }
                    //recalculer le coût de ce noeud
                    int nouveauGCost = noeudCourant.gCost + getDistance(noeudCourant, voisin);
                    //si notre nouveau calcul arrive à un coût plus bas, ou si c'est la première que l'on calcul son coût
                    if (nouveauGCost < voisin.gCost || !openList.Contains(voisin))
                    {                    //attribuer les coût à notre voisin
                        voisin.gCost = nouveauGCost;
                        voisin.hCost = getDistance(voisin, noeudArrivee);
                        //conserver en mémoire qui est son parent
                        voisin.parent = noeudCourant;

                        if (!openList.Contains(voisin))                         //l'ajouter au besoin dans la open list
                        {
                            openList.Add(voisin);
                        }
                    }
                }
            }
        }
    }