Changement de texture dynamique

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
Wooz
Messages : 14
Inscription : 26 Août 2013 16:46

Changement de texture dynamique

Message par Wooz » 20 Nov 2014 18:10

Bonjour à tous,

Je suis sur un petit projet qui me permet de me familiariser un peu plus avec Unity et je gère notamment dans ce projet un plateau dont les cases sont des prismes hexagonaux.
Ces cases sont chacune modélisées par un GameObject puisque j'envisage de pouvoir les détruire/déplacer/modifier et pour l'instant je me contente de modifier leurs textures lorsqu'elles sont sélectionnées, par exemple.

Mon problème est donc le suivant : lorsqu'une case est sélectionnée et que son script appelle le script du plateau pour pouvoir gérer l'évènement au travers de cette fonction :

Code : Tout sélectionner

	public void OnCaseSelection (HexCaseScript hcs) {

		if (_selected == null)
		{
			hcs.gameObject.renderer.material.mainTexture = hcs._stexture;
			_selected = hcs;
		}
		else if (_selected == hcs)
		{
			hcs.gameObject.renderer.material.mainTexture = hcs._texture;
			_selected = null;
		}
		else
		{
			_selected.gameObject.renderer.material.mainTexture = _selected._texture;
			hcs.gameObject.renderer.material.mainTexture = hcs._stexture;
			_selected = hcs;
		}
	}
La texture est bien modifiée, on switch parfaitement entre _texture et _stexture.
Alors que lorsque je veux créer une nouvelle case sans collider qui doit suivre le pointeur de la souris de cette façon :

Code : Tout sélectionner

	public void CreateCasePointeur (Vector3 pointeur) {
		
		hcasep = (GameObject) Instantiate(_hexcase, pointeur, Quaternion.identity);
		
		HexCaseScript hcps = hcasep.GetComponent<HexCaseScript>();
		hcasep.renderer.material.mainTexture = hcps._stexture;
	}
La case est bien créée mais sa texture n'est pas modifiée (et je n'ai pas de message d'erreur comme quoi la texture ne s'est pas chargée).

J'imagine que la réponse est toute bête mais j'ai beau retourner le problème dans tous les sens, je ne trouve pas ce qui cloche.
Quelqu'un a une idée de l'erreur que j'ai faite ?

Merci d'avance pour vos réponses. :)

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Changement de texture dynamique

Message par cayou66 » 21 Nov 2014 17:17

Salut,
en fait "mainTexture" est un raccourci qui va aller chercher la propriété "_MainTex" de ton shader. Si cette propriété ne s'appelle pas comme ça, ton appel ne marchera pas.
Pour changer ça, tu dois utiliser la fonction SetTexture, qui prend le nom de la propriété en paramètre ainsi que la dite texture. Pour savoir quel est le nom de la propriété, tu peux cliquer sur "edit" à côté de la sélection du shader sur ton material.

Référence:
http://docs.unity3d.com/ScriptReference ... xture.html

Avatar de l’utilisateur
Wooz
Messages : 14
Inscription : 26 Août 2013 16:46

Re: Changement de texture dynamique

Message par Wooz » 22 Nov 2014 16:58

Salut,

Du coup j'ai vérifié et la propriété de mon shader s'appelait bien _MainTex.
Vu que la fonction Start() du script attaché à chaque case comprend déjà la ligne :

Code : Tout sélectionner

meshRenderer.material.mainTexture = _texture;
Afin de lui donner une texture par défaut.
Je l'ai donc retirée en pensant qu'elle rentrait en conflit avec la deuxième affectation sur la même frame (je l'ai bien sûr remise là où j'avais besoin de cette affectation) et là, miracle, ça fonctionne.

Mon problème est résolu mais avez-vous une idée du pourquoi ce conflit ?
Pour moi c'est une variable et je devrais pouvoir la réaffecter quand je le veux sans problème.

Répondre

Revenir vers « Scripting »