public static List <Material> GetSelectedMaterialsInProjectHierarchy() { List <Material> selectedMaterials = new List <Material>(); List <string> selectedMaterialPaths = new List <string>(); List <UnityEngine.Object> selection = new List <UnityEngine.Object>(); foreach (UnityEngine.Object obj in Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Assets)) { if (obj.GetType() == typeof(Material) && selectedMaterials.Count <= maxMaterialAllowed) { selectedMaterials.Add((Material)obj); } else { selection.Add(obj); } } List <string> selectedFolders = MegascansUtilities.GetSelectedFolders(selection); foreach (string folder in selectedFolders) { selectedMaterialPaths = selectedMaterialPaths.Concat(MegascansUtilities.GetFiles(folder, ".mat")).ToList(); } foreach (string mPath in selectedMaterialPaths) { Material mat = (Material)AssetDatabase.LoadAssetAtPath(mPath, typeof(Material)); if (mat != null && selectedMaterials.Count <= maxMaterialAllowed) //4 is the max number of layers currently allowed in the HDRenderPipeline/LayeredLit shader. { selectedMaterials.Add(mat); } } return(selectedMaterials); }