static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { var upgradeLog = "UniversalRP Material log:"; var upgradeCount = 0; foreach (var asset in importedAssets) { if (!asset.ToLowerInvariant().EndsWith(".mat")) { continue; } var material = (Material)AssetDatabase.LoadAssetAtPath(asset, typeof(Material)); if (!ShaderUtils.IsLWShader(material.shader)) { continue; } ShaderPathID id = ShaderUtils.GetEnumFromPath(material.shader.name); var wasUpgraded = false; var assetVersions = AssetDatabase.LoadAllAssetsAtPath(asset); AssetVersion assetVersion = null; foreach (var subAsset in assetVersions) { if (subAsset.GetType() == typeof(AssetVersion)) { assetVersion = subAsset as AssetVersion; } } var debug = "\n" + material.name; if (!assetVersion) { wasUpgraded = true; assetVersion = ScriptableObject.CreateInstance <AssetVersion>(); if (s_CreatedAssets.Contains(asset)) { assetVersion.version = k_Upgraders.Length; s_CreatedAssets.Remove(asset); InitializeLatest(material, id); } else { assetVersion.version = 0; } assetVersion.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector | HideFlags.NotEditable; AssetDatabase.AddObjectToAsset(assetVersion, asset); debug += " initialized."; } while (assetVersion.version < k_Upgraders.Length) { k_Upgraders[assetVersion.version](material, id); debug += $" upgrading:v{assetVersion.version} to v{assetVersion.version + 1}"; assetVersion.version++; wasUpgraded = true; } if (wasUpgraded) { upgradeLog += debug; upgradeCount++; EditorUtility.SetDirty(assetVersion); s_ImportedAssetThatNeedSaving.Add(asset); s_NeedsSavingAssets = true; } } }
static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { string upgradeLog = ""; var upgradeCount = 0; foreach (var asset in importedAssets) { // we only care about materials if (!asset.EndsWith(".mat", StringComparison.InvariantCultureIgnoreCase)) { continue; } // load the material and look for it's Universal ShaderID // we only care about versioning materials using a known Universal ShaderID // this skips any materials that only target other render pipelines, are user shaders, // or are shaders we don't care to version var material = (Material)AssetDatabase.LoadAssetAtPath(asset, typeof(Material)); var shaderID = GetShaderID(material.shader); if (shaderID == ShaderID.Unknown) { continue; } var wasUpgraded = false; var debug = "\n" + material.name + "(" + shaderID + ")"; // look for the Universal AssetVersion AssetVersion assetVersion = null; var allAssets = AssetDatabase.LoadAllAssetsAtPath(asset); foreach (var subAsset in allAssets) { if (subAsset is AssetVersion sub) { assetVersion = sub; } } if (!assetVersion) { wasUpgraded = true; assetVersion = ScriptableObject.CreateInstance <AssetVersion>(); if (s_CreatedAssets.Contains(asset)) { assetVersion.version = k_Upgraders.Length; s_CreatedAssets.Remove(asset); InitializeLatest(material, shaderID); debug += " initialized."; } else { if (shaderID.IsShaderGraph()) { // ShaderGraph materials NEVER had asset versioning applied prior to version 5. // so if we see a ShaderGraph material with no assetVersion, set it to 5 to ensure we apply all necessary versions. assetVersion.version = 5; debug += $" shadergraph material assumed to be version 5 due to missing version."; } else { assetVersion.version = UniversalProjectSettings.materialVersionForUpgrade; debug += $" assumed to be version {UniversalProjectSettings.materialVersionForUpgrade} due to missing version."; } } assetVersion.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector | HideFlags.NotEditable; AssetDatabase.AddObjectToAsset(assetVersion, asset); } while (assetVersion.version < k_Upgraders.Length) { k_Upgraders[assetVersion.version](material, shaderID); debug += $" upgrading:v{assetVersion.version} to v{assetVersion.version + 1}"; assetVersion.version++; wasUpgraded = true; } if (wasUpgraded) { upgradeLog += debug; upgradeCount++; EditorUtility.SetDirty(assetVersion); s_ImportedAssetThatNeedSaving.Add(asset); s_NeedsSavingAssets = true; } } // Uncomment to show upgrade debug logs //if (!string.IsNullOrEmpty(upgradeLog)) // Debug.Log("UniversalRP Material log: " + upgradeLog); }