| using System.Collections.Generic; | 
| using UnityEngine; | 
| using UnityEditor; | 
|   | 
| public class PrefabHelper | 
| { | 
|     [InitializeOnLoadMethod] | 
|     static void StartInitializeOnLoadMethod() | 
|     { | 
|         PrefabUtility.prefabInstanceUpdated += OnPrefabInstanceUpdate; | 
|     } | 
|     static void OnPrefabInstanceUpdate(GameObject instance) | 
|     { | 
|         string path = UnityEditor.PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(instance); | 
|   | 
|         var rootGO = PrefabUtility.LoadPrefabContents(path); | 
|   | 
|         var prefabLoaders = rootGO.GetComponentsInChildren<UIPrefabLoader>(); | 
|         var dirty = false; | 
|         foreach (var loader in prefabLoaders) | 
|         { | 
|             if (!string.IsNullOrEmpty(loader.prefabName)) | 
|             { | 
|                 var children = new List<Transform>(); | 
|                 for (int i = 0; i < loader.transform.childCount; i++) | 
|                 { | 
|                     children.Add(loader.transform.GetChild(i)); | 
|                 } | 
|                 for (int i = children.Count - 1; i >= 0; i--) | 
|                 { | 
|                     if (children[i].name == loader.prefabName) | 
|                     { | 
|                         var childGo = children[i].gameObject; | 
|                         GameObject.DestroyImmediate(childGo, true); | 
|                         DebugEx.LogFormat("保存预制:{0},删除了:{1}", path, loader.prefabName); | 
|                         dirty = true; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         if (dirty) | 
|             PrefabUtility.SaveAsPrefabAsset(rootGO, path); | 
|         PrefabUtility.UnloadPrefabContents(rootGO); | 
|     } | 
| } |