public static void LoadShaderPropertyDrawers(Shader shader) { string path = AssetDatabase.GetAssetPath(shader); string code = FileHelper.ReadFileIntoString(path); code = Helper.GetStringBetweenBracketsAndAfterId(code, "Properties", new char[] { '{', '}' }); MatchCollection matchCollection = Regex.Matches(code, @"\[.*\].*(?=\()"); Dictionary <string, string[]> property_drawers = new Dictionary <string, string[]>(); foreach (Match match in matchCollection) { string[] drawers_or_flag_code = GetDrawersFlagsCode(match.Value); string drawer_code = GetNonFlagDrawer(drawers_or_flag_code); if (drawer_code == null) { continue; } string property_name = Regex.Match(match.Value, @"(?<=\])[^\[]*$").Value.Trim(); List <string> drawer_and_parameters = new List <string>(); drawer_and_parameters.Add(Regex.Split(drawer_code, @"\(")[0]); GetDrawerParameters(drawer_code, drawer_and_parameters); property_drawers[property_name] = drawer_and_parameters.ToArray(); } shader_property_drawers[shader] = property_drawers; }