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
}
}
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 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");