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.
[DB-AL] Comment charger toutes les images en même temps ?
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
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
- boubouk50
- 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 ?
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
- boubouk50
- 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 ?
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.
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 ();
}
}
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.kevauto a écrit :je voudrais séparer le chargement des textures dans un autre fichier attaché au projet
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [DB-AL] Comment charger toutes les images en même temps ?
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.
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;
}
}
- boubouk50
- 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 ?
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é.
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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation