文件流方式 删除prefab空脚本

 1 /// <summary>  
 2 /// 删除一个Prefab上的空脚本  
 3 /// </summary>  
 4 /// <param name="path">prefab路径 例Assets/Resources/FriendInfo.prefab</param>  
 5 private void DeleteNullScript(string path)  
 6 {  
 7     bool isNull = false;  
 8     string s = File.ReadAllText(path);  
 9   
10     Regex regBlock = new Regex("MonoBehaviour");  
11   
12     // 以"---"划分组件  
13     string[] strArray = s.Split(new string[] { "---" }, StringSplitOptions.RemoveEmptyEntries);  
14   
15     for (int i = 0; i < strArray.Length; i++)  
16     {  
17         string blockStr = strArray[i];  
18   
19         if (regBlock.IsMatch(blockStr))  
20         {  
21             // 模块是 MonoBehavior  
22             Match guidMatch = Regex.Match(blockStr, "m_Script: {fileID: (.*), guid: (?<GuidValue>.*?), type:");  
23             if (guidMatch.Success)  
24             {  
25                 // 获取 MonoBehavior的guid  
26                 string guid = guidMatch.Groups["GuidValue"].Value;  
27                 //Debug.Log("Guid:" + guid);  
28   
29                 if (string.IsNullOrEmpty(GetScriptPath(guid)))  
30                 {  
31                     // 工程中无此脚本 空脚本!!!  
32                     //Debug.Log("空脚本");  
33                     isNull = true;  
34   
35                     // 删除操作  
36   
37                     // 删除MonoScript  
38                     s = s.Replace("---" + blockStr, "");  
39   
40                     Match idMatch = Regex.Match(blockStr, "!u!(.*) &(?<idValue>.*?)\r");  
41                     if (idMatch.Success)  
42                     {  
43                         // 获取 MonoBehavior的guid  
44                         string id = idMatch.Groups["idValue"].Value;  
45   
46                         // 删除MonoScript的引用  
47                         Regex quote = new Regex("  - (.*): {fileID: " + id + "}");  
48                         s = quote.Replace(s, "");  
49                     }  
50   
51                 }  
52   
53             }  
54   
55         }  
56   
57   
58     }  
59   
60     if (isNull)  
61     {  
62         // 有空脚本 写回prefab  
63         File.WriteAllText(path, s);  
64   
65         // 打印Log  
66         Debug.Log(path);  
67     }  
68 }  

 

posted @ 2017-12-04 10:50  AaronBlogs  阅读(455)  评论(0编辑  收藏  举报