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); 
 | 
    } 
 | 
} 
 |