diff --git a/Packages/com.bywaystudios.gameframework/Editor/ResourceRuleEditor/ResourceRuleEditor.cs b/Packages/com.bywaystudios.gameframework/Editor/ResourceRuleEditor/ResourceRuleEditor.cs index 2bca3b2..0d84c77 100644 --- a/Packages/com.bywaystudios.gameframework/Editor/ResourceRuleEditor/ResourceRuleEditor.cs +++ b/Packages/com.bywaystudios.gameframework/Editor/ResourceRuleEditor/ResourceRuleEditor.cs @@ -243,6 +243,10 @@ namespace StarForce.Editor.ResourceTools r.xMax = r.xMin + 120; rule.searchPatterns = EditorGUI.TextField(r, rule.searchPatterns); + r.xMin = r.xMax + GAP; + r.xMax = r.xMin + 120; + rule.filePatterns = EditorGUI.TextField(r, rule.filePatterns); + r.xMin = r.xMax + GAP; r.xMax = rect.xMax; rule.folderPatterns = EditorGUI.TextField(r, rule.folderPatterns); @@ -342,6 +346,10 @@ namespace StarForce.Editor.ResourceTools r.xMax = r.xMin + 85; EditorGUI.TextField(r, "Filter Type"); + r.xMin = r.xMax + GAP; + r.xMax = r.xMin + 120; + EditorGUI.TextField(r, "Search Patterns"); + r.xMin = r.xMax + GAP; r.xMax = r.xMin + 120; EditorGUI.TextField(r, "File Patterns"); @@ -483,6 +491,10 @@ namespace StarForce.Editor.ResourceTools if (file.Extension.Contains("meta")) continue; + // 检查文件名是否匹配 filePatterns + if (!string.IsNullOrEmpty(resourceRule.filePatterns) && !MatchFilePattern(file.Name, resourceRule.filePatterns)) + continue; + // 检查文件夹是否匹配 folderPatterns if (!string.IsNullOrEmpty(resourceRule.folderPatterns) && !MatchFolderPattern(file.DirectoryName, resourceRule.folderPatterns)) continue; @@ -545,7 +557,10 @@ namespace StarForce.Editor.ResourceTools { if (file.Extension.Contains("meta")) continue; - + + // 检查文件名是否匹配 filePatterns + if (!string.IsNullOrEmpty(resourceRule.filePatterns) && !MatchFilePattern(file.Name, resourceRule.filePatterns)) + continue; // 检查文件所在文件夹是否匹配 folderPatterns if (!string.IsNullOrEmpty(resourceRule.folderPatterns) && !MatchFolderPattern(file.DirectoryName, resourceRule.folderPatterns)) continue; @@ -638,6 +653,9 @@ namespace StarForce.Editor.ResourceTools if (file.Extension.Contains("meta")) continue; + // 检查文件名是否匹配 filePatterns + if (!string.IsNullOrEmpty(resourceRule.filePatterns) && !MatchFilePattern(file.Name, resourceRule.filePatterns)) + continue; // 检查文件所在文件夹是否匹配 folderPatterns if (!string.IsNullOrEmpty(resourceRule.folderPatterns) && !MatchFolderPattern(file.DirectoryName, resourceRule.folderPatterns)) continue; @@ -672,6 +690,51 @@ namespace StarForce.Editor.ResourceTools { return m_ResourceCollection.Save(); } + + /// + /// 检查文件名是否匹配指定的模式 + /// + private bool MatchFilePattern(string fileName, string patterns) + { + if (string.IsNullOrEmpty(patterns)) + return true; + + string[] patternArray = patterns.Split(';', ',', '|'); + + bool hasIncludePattern = false; + bool includeMatched = false; + + foreach (string pattern in patternArray) + { + string trimmedPattern = pattern.Trim(); + if (string.IsNullOrEmpty(trimmedPattern)) + continue; + + if (trimmedPattern.StartsWith("!")) + { + // 排除模式:如果文件名包含排除关键字,直接返回 false + string excludePattern = trimmedPattern.Substring(1).ToLower(); + if (fileName.ToLower().Contains(excludePattern)) + return false; + } + else + { + // 包含模式 + hasIncludePattern = true; + if (MatchWildcard(fileName, trimmedPattern)) + { + includeMatched = true; + } + } + } + + // 如果有包含模式,需要匹配到才返回 true + // 如果只有排除模式,默认返回 true(除非上面已经被排除) + if (hasIncludePattern) + return includeMatched; + else + return true; + } /// /// 检查文件夹路径是否匹配指定的模式 diff --git a/Packages/com.bywaystudios.gameframework/Editor/ResourceRuleEditor/ResourceRuleEditorData.cs b/Packages/com.bywaystudios.gameframework/Editor/ResourceRuleEditor/ResourceRuleEditorData.cs index 1ec5ba5..73d9347 100644 --- a/Packages/com.bywaystudios.gameframework/Editor/ResourceRuleEditor/ResourceRuleEditorData.cs +++ b/Packages/com.bywaystudios.gameframework/Editor/ResourceRuleEditor/ResourceRuleEditorData.cs @@ -23,6 +23,7 @@ namespace StarForce.Editor.ResourceTools public bool packed = true; public ResourceFilterType filterType = ResourceFilterType.Root; public string searchPatterns = "*.*"; + public string filePatterns = "*.*"; public string folderPatterns = "*.*"; } diff --git a/Packages/com.bywaystudios.gameframework/package.json b/Packages/com.bywaystudios.gameframework/package.json index 6b6854f..ab42002 100644 --- a/Packages/com.bywaystudios.gameframework/package.json +++ b/Packages/com.bywaystudios.gameframework/package.json @@ -1,6 +1,6 @@ { "name": "com.bywaystudios.gameframework", "displayName": "GameFramework", - "version": "0.1.2", + "version": "0.1.3", "description": "Custom GameFramework code" } \ No newline at end of file