[RESOLU][DB-AL]Charger un material depuis les assets de mon projet

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
eljeronimooo
Messages : 17
Inscription : 29 Sep 2018 17:25

[RESOLU][DB-AL]Charger un material depuis les assets de mon projet

Message par eljeronimooo » 03 Oct 2018 21:04

Bonjour :)

J'ai un objet Map sur lequel est placé un script ControllerTerrain. Dans l'objet Map se trouve un prefab Sun.

Code : Tout sélectionner

public class ControllerTerrain : MonoBehaviour {
	public Material skybox;
	GameObject sun;

	void start(){
		//For the sun
		sun = GameObject.Find("Map/Sun"); //Get sun object in Scene
		RenderSettings.sun = sun.GetComponent<Light>(); //Set the light component in Window/Lighting/Sun

		//For skybox
		RenderSettings.skybox = skybox; //Set the skybox material in Window/Lighting/Skybox
		
	}

}
Ca marche très bien comme ça, seulement j'aimerais avoir la propriété "skybox" en Privé et donc entrer la valeur dans le script comme je le fait pour le Sun.
Ma skybox se trouve dans un dossier Asset/DevPakage/Terrain/Material/Skybox.mat et j'aimerais qu'elle y reste.
2 solutions trouvées mais pas adaptées :

Code : Tout sélectionner

public Material skybox;

void start(){

	//1er solution, problème : le Shader ne doit pas être utilisé sur d'autre Materials sinon conflits
	skybox = new Material (Shader.Find("Skybox/Procedural")); //Get the skybox material
	
	//2eme solution, problème : mettre le Skybox.mat dans un dossier "Asset/Resources/"
	skybox = Resources.Load("Skybox", typeof(Material)) as Material;

	//Set the skybox material in Window/Lighting/Skybox
	RenderSettings.skybox = skybox; 
		
	}
La 2eme solution m'oblige à changer ma skybox de place ce qui me gène pour la suite.
La 1er solution n'est pas un problème dans mon exemple car Skybox/Procedural n'est utilisé qu'une fois par scène normalement mais je suis sûr qu'une approche plus simple et plus polyvalente existe, un truc genre :

Code : Tout sélectionner

 
skybox = LoadFile.Material("Asset/DevPackage/Terrain/Materials/Skybox.mat");
Merci pour votre aide :)
Dernière édition par eljeronimooo le 08 Nov 2018 06:24, édité 1 fois.

eljeronimooo
Messages : 17
Inscription : 29 Sep 2018 17:25

Re: [DB-AL]Charger un material depuis les assets de mon projet

Message par eljeronimooo » 08 Nov 2018 06:23

Bon je répond moi-même :

Code : Tout sélectionner

skybox = Resources.Load("Skybox", typeof(Material)) as Material;
est visiblement la seule solution mais il faut mettre le fichier à charger dans le dossier Resourses.

Et en fait

Code : Tout sélectionner

skybox = new Material (Shader.Find("Skybox/Procedural"));
ne charge pas vraiment le fichier de mon dossier mais dans les resources d'unity visiblement.

Voilà, RESOLU :)

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

Re: [DB-AL]Charger un material depuis les assets de mon projet

Message par Liven » 08 Nov 2018 08:19

eljeronimooo a écrit :
08 Nov 2018 06:23
Bon je répond moi-même :

Code : Tout sélectionner

skybox = Resources.Load("Skybox", typeof(Material)) as Material;
est visiblement la seule solution mais il faut mettre le fichier à charger dans le dossier Resourses.

Et en fait

Code : Tout sélectionner

skybox = new Material (Shader.Find("Skybox/Procedural"));
ne charge pas vraiment le fichier de mon dossier mais dans les resources d'unity visiblement.

Voilà, RESOLU :)
Merci pour être repasser nous donner la solution :super:

Répondre

Revenir vers « (C#) CSharp »