Unity-批量修改Prefab上的屬性


問題描述:今天發現工程中有些prefab上的腳本丟失了一些引用,本以為手動拖拽上去搞定,后來查看其它prefab,也有類似的問題,於是寫了一個小工具,批量修改下。

 

上代碼:

 1 [ExecuteInEditMode]
 2     [MenuItem("Tools/Add-HitData")]
 3     private static void AddHitData()
 4     {
 5         if (EditorUtility.DisplayDialog("功能確認",
 6             "此功能會遍歷8_AssetBundle/Prefab_Hero/下的全部prefab,並將prefab上的ANIMATION_DATA/HIT賦值到LeaderAction腳本中的HIT_DATA上,確定要執行嗎?",
 7             "確定"))
 8         {
 9             string genPath = Application.dataPath + "/8_AssetBundle/Prefab_Hero/";
10             string[] filesPath = Directory.GetFiles(genPath, "*.prefab", SearchOption.AllDirectories);
11 
12             for (int i = 0; i < filesPath.Length; i++)
13             {
14                 filesPath[i] = filesPath[i].Substring(filesPath[i].IndexOf("Assets"));
15 
16                 GameObject _prefab = AssetDatabase.LoadAssetAtPath(filesPath[i], typeof(GameObject)) as GameObject;
17                 GameObject prefabGameobject = PrefabUtility.InstantiatePrefab(_prefab) as GameObject;
18                 LeaderAction la = prefabGameobject.GetComponent<LeaderAction>();
19 
20 
21                 if (la != null)
22                 {
23                     if (la.HIT_DATA != null) continue;
24                     if (prefabGameobject.transform.FindChild("ANIMATION_DATA/HIT") == null) continue;
25                     la.HIT_DATA = prefabGameobject.transform.FindChild("ANIMATION_DATA/HIT").GetComponent<AnimationData>();
26                     PrefabUtility.ReplacePrefab(prefabGameobject, _prefab, ReplacePrefabOptions.Default);
27                     MonoBehaviour.DestroyImmediate(prefabGameobject);
28                 }
29                 else
30                     continue;
31 
32             }
33             AssetDatabase.SaveAssets();
34             EditorUtility.DisplayDialog("成功", "HIT_DATA 添加完成!", "確定");
35         }
36     }

 

 

由於之前老是有同事亂點擊Tools中的工具導致一些不可預料的浪費時間,於是加上了二次提示框,僅供參考。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM