[DB-AL] Comment charger toutes les images en même temps ?

Pour les scripts écrits en C#
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
boubouk50
ModoGenereux
ModoGenereux
Messages : 6222
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Comment charger toutes les images en même temps ?

Message par boubouk50 » 15 Mai 2017 13:50

Que n'as-tu pas compris?

Tu as un script qui fonctionne pour un fichier. Donc il est fonctionnel. Il faut l'adapter pour plusieurs fichiers -> donc boucler la fonction.
Ensuite le placement. Tu as des nombres dans le nom de tes fichiers. L'un représente les colonnes, l'autres les lignes. Récupère ces chiffres et place les modèles créés en accord avec ceux-ci.

Voilà pour l'explication du processus de chargement multiple.
"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
boubouk50
ModoGenereux
ModoGenereux
Messages : 6222
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] Comment charger toutes les images en même temps ?

Message par boubouk50 » 29 Mai 2017 09:06

Bonjour,
j'ai presque réussi à faire ce que je voulais sur le dernier sujet que j'ai posté mais j'ai une petite anomalie.
viewtopic.php?f=89&t=14110&start=10

J'ai refait entièrement le code map ci-dessous en suivant bien vos conseils, tout fonctionne bien y compris le chargement des textures, mais je voudrais séparer le chargement des textures dans un autre fichier attaché au projet mais ceci ne fonctionne pas et je n'arrive pas à comprendre les raisons de cet échec.

Merci d'avance de votre aide.

Code : Tout sélectionner

// TileGenerator Version : 0.2
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TileGenerator //: MonoBehaviour
{
   private int x, z, nbpoint, nbcarre, nbtriangle, nbsommet, postri, nbuv, ncols, nrows ;
   private int addMemoryX, addMemoryZ;
   //private Material mat;
   //public short[] lineUp, lineDown, lineRight, lineLeft;
   private Texture tex ;
   public float[] lineDown, lineRight;
   public GameObject tile ;
   //void Start ()
   public TileGenerator (string pathfile, int posX, int posZ, int rota, string no_data_value)
   {   
      x = 0 ;
      z = 0 ;
      nbpoint = 0 ;
      nbcarre = 0 ;
      nbtriangle = 0 ;
      nbsommet = 0 ;
      postri = 0 ;
      nbuv = 0 ;
      ncols = 0;
      nrows = 0;
      //Debug.Log (pathfile);
      //LoadFile LF = new LoadFile ("litto3D/LITTO3D_TEST_MNT5.asc");
      //LoadFile LF = new LoadFile ("litto3D/TEST.asc");
      //LoadFile LF = new LoadFile ("litto3D/test/LITTO3D_TEST_MNT5_N3.asc");
      LoadFile LF = new LoadFile(pathfile, no_data_value);

      ncols = (LF.getNCols()+1);
      nrows = (LF.getNRows()+1);

      //short[] lineUp = new short[LF.getNCols()];
      float[] lineDown = new float[ncols-1];
      //short[] lineRight = new short[LF.getNRows()];
      float[] lineLeft = new float[nrows-1];

      string [] namefile = pathfile.Split('_');
      tile = new GameObject (namefile[2] + "_" + namefile[3]);
      tile.transform.position = new Vector3(posX,0,posZ);
      tile.transform.eulerAngles = new Vector3 (0, rota, 0);

      MeshFilter tileMeshFilter = tile.AddComponent<MeshFilter> ();
      //tile.AddComponent<MeshRenderer> ().sharedMaterial = Resources.Load("tile",typeof(Material)) as Material; 

/* JE VOUDRAIS QUE LE CHARGEMENT DES TEXTURES SE FAIT DANS UN AUTRE FICHIER MAIS J'ARRIVE PAS */

      Material mat = new Material (Shader.Find("Standard"));
      mat.SetTexture ("_MainTex",Resources.Load("HR/000-2017-"+ namefile[2] + "-" + namefile[3] + "-L93-0M20-E100") as Texture);
      mat.SetTextureScale("_MainTex", new Vector2(-1,1));    // positionement de la texture
      mat.SetFloat ("_Metallic",0.75f);        // reglage du Metallic
      mat.SetFloat ("_Glossiness",0.75f);      // reglage du Smoothness
      tile.AddComponent<MeshRenderer> ().sharedMaterial = mat;

      Mesh tileMesh = new Mesh ();
      tileMesh.name = (namefile[2] + "_" + namefile[3]) ;
      tileMeshFilter.mesh = tileMesh ;
      //tile.AddComponent<Rigidbody> ().constraints = RigidbodyConstraints.FreezeAll;
      tile.AddComponent<MeshCollider>().sharedMesh = tileMesh;
      //tile.GetComponent<MeshCollider>().convex = true ;

      //calcul du nombre de point
      nbpoint = (ncols * nrows);
      //Debug.Log (nbpoint);
      //régle l'espace entre chaque point
      int espace = (int)LF.getCellSize();

      //Vertices () ( avec rajout)
      Vector3[] verticies = new Vector3[nbpoint];
      //Debug.Log("verticies = " + verticies.Length );
      // Vector3(largeur,hauteur,longeur);
      //         X,Y,Z
      // Boucle de création des point 

      for(int vertix = 0; vertix < nrows ; vertix++)
      {
         //Debug.Log ("for X = " + x);
         //Debug.Log(verticies.Length +"X ="+ vertix);
         for(int vertiz = 0; vertiz <= ncols ; vertiz++)
         {
            //Debug.Log ("for Z = " + z);
            //Debug.Log ("Y = " +  (LF.getHauteur(vertix,vertiz, 0))/100);
            //Debug.Log("vertix = "+ vertix +" vertiz = "+ vertiz);
            //Debug.Log("verticies = " + (vertix * ncols + vertiz));
            //Debug.Log("vertix = " + vertix + " = " + (nrows-1) );

            //Copie de la dernier ligne dans le tableau lineDown
            //if(vertix == (nrows-1) && vertiz < (ncols-1)) Debug.Log("Line Down : vertix = " + (vertix-1) +" vertiz = " + vertiz);
            if(vertix == (nrows-1) && vertiz < (ncols-1)) lineDown[vertiz] = LF.getHauteur(vertix-1,vertiz);

            //Copie de la bordure gauche dans le tableau lineRight
            //if(vertix < (nrows-1)&& vertiz == (ncols-1)) Debug.Log("Line Right : vertix = " + vertix +" vertiz = " + vertiz);
            if(vertix < (nrows-1)&& vertiz == (ncols-1)) lineLeft[vertix] = LF.getHauteur(vertix,vertiz-1);


            if (vertix == (nrows - 1) && vertiz < (ncols - 1))
            {
               // Debug.Log ("Down = "+ addMemoryX++ );
               //Debug.Log ("lineDown = "+ (lineDown [addMemoryX]/100) );
               verticies [(vertix * (ncols ) + vertiz)] = new Vector3 (x, (lineDown [addMemoryX++]), z);
               //Debug.Log("Down = "+addMemoryX);
            }

            if (vertiz == (ncols - 1) && vertix < (nrows - 1))
            {
               //Debug.Log ("Left = "+ addMemoryZ );
               verticies [(vertix * (ncols ) + vertiz)] = new Vector3 (x, (lineLeft [addMemoryZ++]), z);
               //Debug.Log("addMemoryZ = "+addMemoryZ);
            }

            if (vertix < (nrows-1) && vertiz < (ncols-1))
            {
               verticies[(vertix * ncols + vertiz)] = new Vector3 (x, (LF.getHauteur(vertix,vertiz)) , z);
               //if(vertix == nrows-2)Debug.Log("verticies["+(vertix * ncols + vertiz)+"] = " + (LF.getHauteur(vertix,vertiz)/100));
            }

            if(vertix == (nrows-1) && vertiz  == ncols)
            {   
               // Debug.Log ("x= " +addMemoryX + " z= " +addMemoryZ);
               //Debug.Log("verticies[] = " + (vertix * ncols + vertiz));
               //Debug.Log ("verticies[" + (vertix * ncols + vertiz)+ "] x= " +(vertix-1) + " z= " +(vertiz-2));
               //Debug.Log (((LF.getHauteur((vertix-1),(vertiz-2)))/100));
               verticies[(vertix * ncols + vertiz)-1] = new Vector3 (x, (LF.getHauteur((vertix-1),(vertiz-2))) , z);
            }
            //Debug.Log(vertix * ncols + vertiz);

            z += espace;
         }
         x += espace;
         z = 0;
      }
      //Debug.Log ("addMemory X = "+ addMemoryX );
      //Debug.Log ("addMemory Z = "+ addMemoryZ );
      /*
      Debug.Log ("lineDown.Length = "+ lineDown.Length );
      for(int i = 0 ; i < lineDown.Length ; i++)
      {
         Debug.Log ("lineDown["+i+"] = "+ lineDown[i] );
      }*/
      /*
      Debug.Log ("lineLeft.Length = "+ lineLeft.Length );
      for(int i = 0 ; i < lineLeft.Length ; i++)
      {
         Debug.Log ("lineLeft["+i+"] = "+ lineLeft[i] );
      }*/

      /*
      // affiche des piques
      for(int i= 0 ; i < nbpoint; i++)
      {
         if((verticies[i].x == 10) && (verticies[i].z == 10)) verticies[i].y = 150 ;
         if((verticies[i].x == 100) && (verticies[i].z == 10)) verticies[i].y = 100 ;
         if((verticies[i].x == 10) && (verticies[i].z == 100)) verticies[i].y = 50 ;
      }*/

      //Calcul (avec rajout)
      //Debug.Log ("nbpoint = " + nbpoint);
      nbcarre = (ncols) * (nrows) ;
      //Debug.Log ("nbcarre = " + nbcarre);
      nbtriangle = nbcarre * 2;
      //Debug.Log ("nbtriangle = " + nbtriangle);
      nbsommet = nbtriangle * 3;
      //Debug.Log ("nbsommet = " + nbsommet);


      //Triangles () ( avec rajout)
      int[] tri = new int[nbsommet];
      for(int trix = 1; trix < ncols; trix++)
      {
         for(int triz = 0; triz < nrows-1; triz++)
         {
            //1
            tri [postri] = (trix * nrows) + triz ;
            postri++;

            //2
            tri [postri] = ((trix - 1) * nrows) + triz ;
            postri++;
            //3
            tri [postri] = ((trix - 1) * nrows) + (triz + 1) ;
            postri++;
            //4
            tri [postri] = (trix *nrows) + triz ;
            postri++;
            //5
            tri [postri] = ((trix - 1) *nrows) + (triz + 1) ;
            postri++;
            //6
            tri [postri] = (trix * nrows) + (triz + 1) ;
            postri++;
         }
      }

      
      //UVs ( Comment les textures sont affichées ( avec rajout) )
      Vector2[] uv = new Vector2[nbpoint];

      for (float uvx = 0f; uvx < ncols; uvx++)
      {
         for(float uvz = 0f; uvz < nrows; uvz++)
         {   
            uv [nbuv] = new Vector2 (-(uvz/(nrows-1)), -(uvx/(ncols-1)));
            nbuv++;
         }
      }

      //Affectation des carractéristique du mesh
      tileMesh.vertices = verticies;
      tileMesh.triangles = tri;
      tileMesh.uv = uv;
      tileMesh.RecalculateNormals ();

   }
}
 ! Message de : boubouk50
@Kevauto. Je ne fais pas d'aide particulière. Le forum est là pour que tout le monde puisse t'aider et que tout le monde ait accès à la solution ET au raisonnement pour y arriver. Je poste donc ton message dans ton sujet
kevauto a écrit :je voudrais séparer le chargement des textures dans un autre fichier attaché au projet
C'est uniquement une paramétrisation d'un chemin. Au lieu d'écrire ton chemin en dur, il faut le paramétrer pour que tu puisses choisir celui que tu veux au moment du chargement. Comment vois-tu la chose? Une boite de dialogue pour aller chercher le bon chemin? Tu as aussi la possibilité de créer des dossiers dans le dossier Resources que tu nommerais avec un indice/paramètre/mot clé qui te permettrait de choisir le bon dossier. Au delà de comment on fait, il faut que tu détermines comment tu le fais puisque que c'est à toi de décider du nom des dossiers.
"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

kevauto
Messages : 18
Inscription : 22 Mars 2017 10:00

Re: [DB-AL] Comment charger toutes les images en même temps ?

Message par kevauto » 29 Mai 2017 22:08

Je voudrais juste séparer cette partie du fichier Map.cs dans un autre fichier Texture.cs
Mais le problème c'est que ceci ne fonctionne plus lors de la séparation.
Et je ne comprends pas entièrement la conséquence de ce souci.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class LoadTexture //: MonoBehaviour
{
	private Texture tex ;
	public GameObject tile ;

	public LoadTexture (string pathfile, string no_data_value)
	{	
		string [] namefile = pathfile.Split('_');
		tile = new GameObject (namefile[2] + "_" + namefile[3]);

		MeshFilter tileMeshFilter = tile.AddComponent<MeshFilter> ();

		Material mat = new Material (Shader.Find("Standard"));
		mat.SetTexture ("_MainTex",Resources.Load("HR/000-2017-"+ namefile[2] + "-" + namefile[3] + "-L93-0M20-E100") as Texture);
		mat.SetTextureScale("_MainTex", new Vector2(-1,1)); 	// positionement de la texture
		tile.AddComponent<MeshRenderer> ().sharedMaterial = mat;

		Mesh tileMesh = new Mesh ();
		tileMesh.name = (namefile[2] + "_" + namefile[3]) ;
		tileMeshFilter.mesh = tileMesh ;
		tile.AddComponent<MeshCollider>().sharedMesh = tileMesh;
	}
}

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

Re: [DB-AL] Comment charger toutes les images en même temps ?

Message par boubouk50 » 30 Mai 2017 09:43

Il faut bien que tu fasses attention au objets envoyés et retournés.
D'un côté, tu vas avoir des variables déjà initialisées qui devront être utiles de l'autre. Il faut donc les envoyer en paramètre.
Tu vas aussi avoir des variables utilisées dans le second qui doivent encore être utilisées dans le premier. Il faut donc les renvoyer sinon elles ne seront jamais affectées correctement.
Regarde bien les variables telles tile et tileMesh, qui apparaissent des deux côtés. Il faut que ces variables aient les mêmes données ou bien il faut les rapatrier d'un seul côté.
"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

Répondre

Revenir vers « (C#) CSharp »