// import materials private unsafe void ImportMaterials(int nmaterial) { // allocate array, find all existing materials = new Material[nmaterial]; Object[] allmaterials = Resources.FindObjectsOfTypeAll(typeof(Material)); // process materials for (int i = 0; i < nmaterial; i++) { // get material name StringBuilder name = new StringBuilder(100); MJP.GetElementName(MJP.TElement.MATERIAL, i, name, 100); string matname = fileName + "_" + name.ToString(); // find existing material foreach (Object matt in allmaterials) { if (matt != null && matt.name == matname) { materials[i] = (Material)matt; break; } } // not found: create new material materials[i] = new Material(Shader.Find("Standard")); // get material descriptor and save MJP.TMaterial mat; MJP.GetMaterial(i, &mat); // set properties materials[i].name = matname; materials[i].EnableKeyword("_EMISSION"); materials[i].SetColor("_Color", new Color(mat.color[0], mat.color[1], mat.color[2], mat.color[3])); materials[i].SetColor("_EmissionColor", new Color(mat.emission, mat.emission, mat.emission, 1)); if (mat.color[3] < 1) { materials[i].SetFloat("_Mode", 3.0f); } // set texture if present if (mat.texture >= 0 && importTexture) { materials[i].mainTexture = textures[mat.texture]; materials[i].mainTextureScale = new Vector2(mat.texrepeat[0], mat.texrepeat[1]); } // create asset in database if not aleady there if (!AssetDatabase.Contains(materials[i])) { AssetDatabase.CreateAsset(materials[i], "Assets/Materials/" + matname + ".mat"); } } AssetDatabase.Refresh(); }