// Handle all Group to Prefab imports, also will handle MetaData cleanups for models in future static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { foreach (string str in importedAssets) { // Auto Import Groups if (str.Contains(".b2ug")) { B2U_Utils.GroupToPrefab(str); } if (str.Contains(".b2us")) { B2U_Utils.SceneToPrefab(str); } } }
// Import and Set Materials ----------------------------- Material OnAssignMaterialModel(Material material, Renderer renderer) { // Find this material string path_mat = ""; string path_mat_xml = ""; for (int i = 0; i < MatList.Count; i++) { B2U_MatPath Mat = MatList[i]; if (Mat == null) // Previne erros quando a variável possui lixo ou foi removido pela Garbage Collector { MatList.RemoveAt(i); } else { if (Mat._Mat.name == material.name) { path_mat = Mat._Path + "/" + material.name + ".mat"; path_mat_xml = "Assets/" + B2U_Importer.metaDataPath + "Materials/" + material.name + ".b2mat"; } } } // Create/Reimport B2U Material if (path_mat != "") { // Configure the Material based on XML file XmlDocument mat_xml = new XmlDocument(); mat_xml.Load(path_mat_xml); XmlNode mat_xml_root = mat_xml.DocumentElement; Shader shader_name = Shader.Find(mat_xml_root.SelectSingleNode("Shader").InnerText); //XmlNode mode = mat_xml_root.SelectSingleNode("MaterialMode"); // If it's a not valid shader use the B2U error material if (shader_name == null) { Debug.LogWarning(mat_xml_root.SelectSingleNode("Shader").InnerText); Debug.LogWarning(shader_name); Debug.LogWarning("B2U Process: The material " + path_mat + " has not a valid shader name. The Default Error Material will be used to your convenience"); Material errorMat = (Material)AssetDatabase.LoadAssetAtPath("Assets/B2U/Editor/UI/Error.mat", typeof(Material)); return(errorMat); } bool rewrite = ((mat_xml_root.SelectSingleNode("Rewrite").InnerText == "True") ? true : false); Material mat; bool updateProperties = false; // Se tiver um material com esse nome if (AssetDatabase.LoadAssetAtPath(path_mat, typeof(Material))) { // Se estiver marcado para ser atualizado if (rewrite) { // Marca para atualizar updateProperties = true; mat = AssetDatabase.LoadAssetAtPath(path_mat, typeof(Material)) as Material; mat.shader = shader_name; } // Tem o material, mas não está marcado para atualizar, só usa o mesmo else { return(AssetDatabase.LoadAssetAtPath(path_mat, typeof(Material)) as Material); } } // O material ainda não existe else { updateProperties = true; material.shader = shader_name; AssetDatabase.CreateAsset(material, path_mat); mat = material; } if (updateProperties) { // Set Keywords mat.EnableKeyword("_NORMALMAP"); mat.EnableKeyword("_EMISSION"); mat.EnableKeyword("_METALLICGLOSSMAP"); mat.EnableKeyword("_SPECGLOSSMAP"); // Get Data from Channels when available XmlNode channels = mat_xml_root.SelectSingleNode("Channels"); // Base Color if (B2U_Utils.getXMLChannel(channels, "_Color") != "null") { Color baseColorFromData = B2U_Utils.parseColorChannel(channels.SelectSingleNode("_Color").InnerText); mat.SetColor("_Color", baseColorFromData); mat.SetColor("_BaseColor", baseColorFromData); // URP Unlit mat.SetColor("_UnlitColor", baseColorFromData); // HDRP Unlit } // Albedo if (B2U_Utils.getXMLChannel(channels, "_MainTex") != "null") { Texture baseAlbedoFromData = B2U_Utils.parseTextureChannel(channels.SelectSingleNode("_MainTex").InnerText); if (baseAlbedoFromData) { mat.SetTexture("_MainTex", baseAlbedoFromData); mat.SetTexture("_BaseMap", baseAlbedoFromData); // URP Unlit mat.SetTexture("_UnlitColorMap", baseAlbedoFromData); //HDRP Unlit mat.SetFloat("_UseColorMap", 1.0f); // URP Autodesk } else { mat.SetTexture("_MainTex", null); mat.SetTexture("_BaseMap", null); // URP Unlit mat.SetTexture("_UnlitColorMap", null); // HDRP Unlit mat.SetFloat("_UseColorMap", 0.0f); // URP Autodesk } } // Metallic if (B2U_Utils.getXMLChannel(channels, "_MetallicGlossMap") != "null" && B2U_Utils.getXMLChannel(channels, "_Metallic") != "null") { Texture baseMetallicFromData = B2U_Utils.parseTextureChannel(channels.SelectSingleNode("_MetallicGlossMap").InnerText); if (baseMetallicFromData) { mat.SetTexture("_MetallicGlossMap", baseMetallicFromData); mat.SetFloat("_UseMetalicMap", 1.0f); // URP Autodesk } else { mat.SetTexture("_MetallicGlossMap", null); float baseMetallicFloatFromData = B2U_Utils.parseFloatChannel(channels.SelectSingleNode("_Metallic").InnerText); mat.SetFloat("_Metallic", baseMetallicFloatFromData); mat.SetFloat("_UseMetalicMap", 0.0f); // URP Autodesk } } // Roughness Texture baseRoughnessFromData = B2U_Utils.parseTextureChannel(channels.SelectSingleNode("_SpecGlossMap").InnerText); if (baseRoughnessFromData) { mat.SetTexture("_SpecGlossMap", baseRoughnessFromData); mat.SetFloat("_UseRoughnessMap", 1.0f); // URP Autodesk } else { mat.SetTexture("_SpecGlossMap", null); float baseRoughnessFloatFromData = B2U_Utils.parseFloatChannel(channels.SelectSingleNode("_Glossiness").InnerText); mat.SetFloat("_Glossiness", baseRoughnessFloatFromData); mat.SetFloat("_UseRoughnessMap", 0.0f); // URP Autodesk } // Normal Map Texture baseNormalFromData = B2U_Utils.parseTextureChannel(channels.SelectSingleNode("_BumpMap").InnerText); if (baseNormalFromData) { mat.SetTexture("_BumpMap", baseNormalFromData); } else { mat.SetTexture("_BumpMap", null); } // Emission Texture baseEmissionFromData = B2U_Utils.parseTextureChannel(channels.SelectSingleNode("_EmissionMap").InnerText); if (baseEmissionFromData) { mat.SetColor("_EmissionColor", new Color(1, 1, 1)); mat.SetTexture("_EmissionMap", baseEmissionFromData); } else { mat.SetTexture("_EmissionMap", null); Color baseEmissionColorFromData = B2U_Utils.parseColorChannel(channels.SelectSingleNode("_EmissionColor").InnerText); mat.SetColor("_EmissionColor", baseEmissionColorFromData); } // Transparent string value = channels.SelectSingleNode("_Transparent").InnerText; if (value == "OPAQUE") { mat.SetFloat("_Mode", 0.0f); } if (value == "CLIP") { mat.SetFloat("_Mode", 1.0f); } if (value == "BLEND") { mat.SetFloat("_Mode", 2.0f); } } return(mat); } else { // Default Importer return(null); } }