[DB - AL] Scripter un import de texture sur un gameObject
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
[DB - AL] Scripter un import de texture sur un gameObject
Bonjour !
Je travaille depuis quelques mois pour ma boîte sur un projet de logiciel de mise en situation automatique, le principe est le suivant : le client ouvre le logiciel, il y trouve un lieu en 3D avec les différents supports, il importe un fichier image et ce visuel se place sur un des supports choisis au préalable.
J'arrive à la fin mais je bloque, et j'aurais besoin de votre aide pour le script de texturing du support. Etant débutant sur Unity j'ai appris au fur et à mesure de l'avancé du projet et ce bout de code manquant m'a l'air assez complexe...
Chacun des supports possède un Box Collider avec un script qui ouvre un explorateur de fichier au clic (trouvé sur l'asset Store, le U file browser). Cet explorateur de fichier permet de sélectionner l'image sur l'ordinateur qui servira de visuel au support. Une fois le fichier importé, une fonction se lance et c'est dans cette fonction que doit se trouver les lignes de code permettant de texturer le support avec l'image importée. Il ne me manque que ce bout de code pour terminer le projet.
On a donc un box collider sur chaque gameObject de support pour le clic ouvrant l'explorateur de fichier, et chaque partie qui doit être texturée porte le tag "VISUEL". Par exemple pour un cadre, la texture ne sera pas sur l'ensemble du gameObject, l'image n'étant qu'à l'intérieur du cadre et non sur sa moulure, d'où la raison du tag pour la partie à texturer.
Comme le script est apposé sur chaque support, on pourrait écrire quelque chose du type "this.FindWithTag"VISUEL";" pour ce qui est de l'endroit où la texture se pose. Pour la transformation de l'image en texture je bloque et je ne sais pas si c'est chose facile...
J'espère avoir été assez clair dans mes explications. Merci d'avance pour votre aide !
Je travaille depuis quelques mois pour ma boîte sur un projet de logiciel de mise en situation automatique, le principe est le suivant : le client ouvre le logiciel, il y trouve un lieu en 3D avec les différents supports, il importe un fichier image et ce visuel se place sur un des supports choisis au préalable.
J'arrive à la fin mais je bloque, et j'aurais besoin de votre aide pour le script de texturing du support. Etant débutant sur Unity j'ai appris au fur et à mesure de l'avancé du projet et ce bout de code manquant m'a l'air assez complexe...
Chacun des supports possède un Box Collider avec un script qui ouvre un explorateur de fichier au clic (trouvé sur l'asset Store, le U file browser). Cet explorateur de fichier permet de sélectionner l'image sur l'ordinateur qui servira de visuel au support. Une fois le fichier importé, une fonction se lance et c'est dans cette fonction que doit se trouver les lignes de code permettant de texturer le support avec l'image importée. Il ne me manque que ce bout de code pour terminer le projet.
On a donc un box collider sur chaque gameObject de support pour le clic ouvrant l'explorateur de fichier, et chaque partie qui doit être texturée porte le tag "VISUEL". Par exemple pour un cadre, la texture ne sera pas sur l'ensemble du gameObject, l'image n'étant qu'à l'intérieur du cadre et non sur sa moulure, d'où la raison du tag pour la partie à texturer.
Comme le script est apposé sur chaque support, on pourrait écrire quelque chose du type "this.FindWithTag"VISUEL";" pour ce qui est de l'endroit où la texture se pose. Pour la transformation de l'image en texture je bloque et je ne sais pas si c'est chose facile...
J'espère avoir été assez clair dans mes explications. Merci d'avance pour votre aide !
- boubouk50
- ModoGenereux
- Messages : 6186
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB - AL] Scripter un import de texture sur un gameObject
Tout simplement, il faut remplacer la texture du matériau du plan de l'objet sélectionné.
Par contre, ton image risque d'être déformée si elle n'a pas le même aspect ratio que ton plan.
Fais une recherche sur ce forum pour changer une texture d'un matériau au runtime, j'ai déjà répondu à cette question une bonne centaine de fois en 3 ans.
Par contre, ton image risque d'être déformée si elle n'a pas le même aspect ratio que ton plan.
Fais une recherche sur ce forum pour changer une texture d'un matériau au runtime, j'ai déjà répondu à cette question une bonne centaine de fois en 3 ans.
"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] Scripter un import de texture sur un gameObject
Salut et merci pour ta réponse,
J'ai bien saisi ce que je devais faire, je n'ai juste aucune idée de comment le coder. Je ne comprends pas comment dire au script de récupérer l'image pour en faire une texture... La plupart des topics parlent d'une image déjà présente dans les dossiers du projet (J'ai lu qu'il y avait un dossier Ressources, peut-être dois-je faire en sorte que l'image importée se stocke dedans ?). J'ai cherché sur le forum avec les mots-clés que tu as évoqué mais je n'ai rien trouvé qui résoud mon problème, ou alors je n'imagine pas les choses de la bonne manière.
Pour le format d'image je précise les différentes dimensions dans le logiciel pour que le client importe un visuel avec des proportions homothétiques.
J'ai bien saisi ce que je devais faire, je n'ai juste aucune idée de comment le coder. Je ne comprends pas comment dire au script de récupérer l'image pour en faire une texture... La plupart des topics parlent d'une image déjà présente dans les dossiers du projet (J'ai lu qu'il y avait un dossier Ressources, peut-être dois-je faire en sorte que l'image importée se stocke dedans ?). J'ai cherché sur le forum avec les mots-clés que tu as évoqué mais je n'ai rien trouvé qui résoud mon problème, ou alors je n'imagine pas les choses de la bonne manière.
Pour le format d'image je précise les différentes dimensions dans le logiciel pour que le client importe un visuel avec des proportions homothétiques.
Re: [DB - AL] Scripter un import de texture sur un gameObject
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: [DB - AL] Scripter un import de texture sur un gameObject
Salut Max, merci pour ton aide !
En effet ça pourra m'être utile, mais il faut préciser si d'autres viennent lire ce topic que le code est obsolète. Si je dis pas de connerie il faut remplacer par .
J'ai mis cet aspect là de côté pour le moment, j'aimerais me focaliser sur le fait d'appliquer la texture au bon endroit. Je voulais trouver un moyen de trouver à la fois les enfants dans la hiérarchie, puis ceux taggués "VISUEL". Finalement je n'ai pas l'impression que ce soit possible, donc j'ai détourné le problème en renommant les mesh à texturer plutôt qu'en les tagguant, ainsi je peux les trouver avec un.
Je rame, je rame, je rame... voici mon code actuel :
Quand je clique sur mon objet l'explorateur de fichier s'ouvre. Un UI.Text affiche à l'écran le nom de l'objet qui a ouvert l'explorateur de fichier. Il faudrait que je puisse récupérer cette information à la place du "this" de la fonction Test(), car cette fonction est appelée par mon explorateur de fichier lorsque je clique sur le bouton d'import, ce qui fait qu'il cherche dans les enfants de l'explorateur de fichier plutôt que dans ceux de mon support... mais je ne vois pas comment faire
En effet ça pourra m'être utile, mais il faut préciser si d'autres viennent lire ce topic que le code est obsolète. Si je dis pas de connerie il faut remplacer
Code : Tout sélectionner
renderer.material.mainTexture = www.texture;
Code : Tout sélectionner
GetComponent<Renderer>().material.mainTexture = www.texture;>
J'ai mis cet aspect là de côté pour le moment, j'aimerais me focaliser sur le fait d'appliquer la texture au bon endroit. Je voulais trouver un moyen de trouver à la fois les enfants dans la hiérarchie, puis ceux taggués "VISUEL". Finalement je n'ai pas l'impression que ce soit possible, donc j'ai détourné le problème en renommant les mesh à texturer plutôt qu'en les tagguant, ainsi je peux les trouver avec un
Code : Tout sélectionner
this.gameObject.transform.Find ("VISUEL")
Je rame, je rame, je rame... voici mon code actuel :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class OnMouseDownScript : MonoBehaviour {
public GameObject explorateurFichier;
public Text txtSupportActif;
void OnMouseDown() // Au clic sur gameObject, active le FileBrowser et affiche le nom du support sélectionné.
{
explorateurFichier.SetActive (true);
txtSupportActif.text = this.name;
}
void Update() //Supprime le nom du support sélectionné si l'explorateur est fermé.
{
if (explorateurFichier.activeSelf == false) {
txtSupportActif.text = null;
}
}
public void Test () { //Trouve le mesh à texturer dans la hiérarchie. Fonction lancée depuis le Filebrowser.
if (this.gameObject.transform.Find ("VISUEL")) {
Debug.Log ("Enfant trouvé dans la hiérarchie !");
} else {
Debug.Log ("Rien trouvé :( !");
}
}
}
- boubouk50
- ModoGenereux
- Messages : 6186
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB - AL] Scripter un import de texture sur un gameObject
Là, pour le coup, c'est ton script d'explorateur qui va te donner cela. Normalement lorsque tu sélectionnes un fichier, ce script doit créer un événement avec quelque chose, peut-être le chemin de la variable. C'est cette information qui est importante. Si ton asset est payant, tu ne peux pas mettre son code ici, il te faudra donc trouver le code lié au fichier choisi.
"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] Scripter un import de texture sur un gameObject
Oh.. je redoutais de devoir fouiller dans le code de l'explorateur...
Il n'y a donc aucun moyen de remplacer le "this" par une variable générique ? J'avais pensé à quelque chose du style :
Bon bien sûr là ça ne risque pas de fonctionner puisque je récupère un texte, mais dans l'idée ? avec un .name ?
Il n'y a donc aucun moyen de remplacer le "this" par une variable générique ? J'avais pensé à quelque chose du style :
Code : Tout sélectionner
void Start()
{ support = txtSupportActif.text}
public void Test(){
if (support.gameObject.transform.Find ("VISUEL")) { ...
- boubouk50
- ModoGenereux
- Messages : 6186
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB - AL] Scripter un import de texture sur un gameObject
Tu peux bien déclarer une variable si tu veux mais quoiqu'il arrive il faudra bien qu'elle pointe sur un objet. Le connais-tu cet objet qui contient le nom ou le chemin de ce que tu veux?
"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] Scripter un import de texture sur un gameObject
Je pense avoir trouvé ! je cherchais dans le code puis je me suis dit que dans l'Inspector on devrait voir la variable pour pouvoir la réutiliser, et tout simplement il y avait un "Filename". En testant lorsque j'importe le visuel, le nom du fichier se met bien dans cette case de l'Inspector.
J'ai aussi trouvé le moyen de sélectionner la bonne partie du support sur lequel on a cliqué, voici mon code actuel :
Je continue de chercher comment le faire par moi-même et je reviens vers vous, si en attendant vous voyez des problèmes je suis preneur de toutes remarques !
J'ai aussi trouvé le moyen de sélectionner la bonne partie du support sur lequel on a cliqué, voici mon code actuel :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class OnMouseDownScript : MonoBehaviour {
public GameObject explorateurFichier;
public Text txtSupportActif;
public void OnMouseDown() // Au clic sur gameObject : active le FileBrowser, affiche le nom du support sélectionné et trouve la surface à texturer.
{
explorateurFichier.SetActive (true);
txtSupportActif.text = this.name;
if (this.transform.Find ("VISUEL").gameObject) {
Debug.Log ("Enfant(s) trouvé(s) dans la hiérarchie !");
GameObject children = this.transform.Find ("VISUEL").gameObject;
Debug.Log (children);
} else {
Debug.Log ("Rien trouvé :( !");
}
}
void Update() //Désaffiche le nom du support sélectionné si l'explorateur est fermé.
{
if (explorateurFichier.activeSelf == false) {
txtSupportActif.text = null;
}
}
void Test () { //Fonction lancée depuis le Filebrowser : texture la surface trouvée dans le OnMouseDown.
}
}
Re: [DB - AL] Scripter un import de texture sur un gameObject
Je me heurte à un nouveau problème... Je sais accéder au composant d'un script et donc réutiliser la variable dont tu me parlais boubouk50, le soucis étant que le script n'est pas en Monobehaviour mais en UIBehaviour et je pense que pour cette raison je ne peux pas y accéder, auriez-vous des pistes sur la manière de s'y prendre ?
Code : Tout sélectionner
public class FileBrowser : UIBehaviour {