31
2018
05

Unity鎻掍欢寮鍙:PrefabUtility锛堜簩锛--Prefab瀹炰緥鎵归噺Apply

鍦ㄣUnity鎻掍欢寮鍙:PrefabUtility--Prefab瀹炰緥寮曠敤鏂紑鍜屾浛鎹銆嬩腑鎴戜滑浣跨敤浜哖refabUtility瀹炵幇浜哖refab瀹炰緥鐨勫紩鐢ㄦ柇寮鍜屾浛鎹㈠姛鑳斤紝鐜板湪鎴戜滑缁х画浣跨敤PrefabUtility鏉ュ疄鐜板満鏅腑鎵鏈塒refab瀹炰緥鐨凙pply鍔熻兘銆

闇姹傛弿杩

鍦ㄥ緢澶氭儏鍐典笅锛屾垜浠細鍦ㄥ満鏅腑淇敼Prefab瀹炰緥锛岃繖浜涗慨鏀圭悊搴攁pply鍒癙refab涓婏紝浣嗘槸鏈夋椂鍊欎細蹇樿Apply锛屼簨鍚庡啀鍘绘壘锛屽彲鑳借姳璐瑰緢澶氭椂闂淬傛垨鑰呭湪涓浜涙潯浠朵笅锛岄渶瑕佸鍦烘櫙涓殑涓浜汸refab瀹炰緥杩涜鎵归噺淇敼銆傝繖鏃跺欎篃闇瑕佹壒閲廰pply鍒癙refab涓娿

鎬濊矾

閬嶅巻鍦烘櫙涓墍鏈塆ameObject锛屽鏋滄槸Prefab瀹炰緥锛屾壘鍒拌繖涓狿refab瀹炰緥鐨凱refab鏍硅妭鐐癸紙鍙兘閲嶅锛屾墍浠ヨ繖閲岃繕闇瑕佽繃婊や竴涓嬶紝閬垮厤閲嶅澶勭悊锛夛紝鐒跺悗鎵惧埌杩欎釜Prefab瀹炰緥瀵瑰簲鐨凱refab锛岀敤鍦烘櫙涓殑杩欎釜鐗╀綋鍒朵綔涓涓狿refab鏇挎崲鎺夊師鏉ョ殑Prefab銆

image

娉ㄦ剰锛屼笂鍥句腑Directional Light鏄満鏅腑鐨勬牴鑺傜偣锛岃孴icket鏄疨refab鏍硅妭鐐广

瑕佸畬鎴愯繖涓姛鑳斤紝闇瑕佺敤鍒颁互涓嬪嚑涓嚱鏁帮細

  • PrefabUtility.ReplacePrefab鈥斺旀浛鎹refab

  • PrefabUtility.GetPrefabParent鈥斺旇幏鍙杙refab

  • PrefabUtility.GetPrefabType鈥斺旇幏鍙栦竴涓墿浣撶殑prefab绫诲瀷

  • PrefabUtility.FindPrefabRoot鈥斺旇幏鍙栦竴涓墿浣撳湪prefab(鎴杙refab瀹炰緥)涓殑鏍硅妭鐐

瀹炵幇

    [MenuItem("Tools/Prefab/ApplyAll")]public static void AllApply()
    {var prefabs = Object.FindObjectsOfType<GameObject>();//鍦烘櫙涓墍鏈塆ameObjectvar lst = new List<GameObject>();//鐢ㄤ簬閬垮厤閲嶅鐨勫垪琛╢oreach (var gameObject in prefabs)//閬嶅巻        {var isprefab = PrefabUtility.GetPrefabType(gameObject);//鐗╀綋鐨凱refabTypeif (isprefab != PrefabType.PrefabInstance)//涓嶆槸Prefab瀹炰緥continue;var prefab = PrefabUtility.GetPrefabParent(gameObject);//娌℃湁瀵瑰簲鐨凱refab锛堝彲鑳借鍒犻櫎鎺変簡锛塱f (prefab == null)continue;//Debug.Log(prefab);var rt = PrefabUtility.FindPrefabRoot(gameObject);//鐗╀綋鐨凱refab鏍硅妭鐐筰f (rt == null || lst.Contains(rt))//瀛樺湪涓斾笉閲嶅continue;
            lst.Add(rt);//澧炲姞鍒板垪琛ㄤ腑//Debug.Log(rt.name);PrefabUtility.ReplacePrefab(rt, prefab);//瀹炵幇鏇挎崲杈惧埌Apply鐨勭洰鐨        }
    }
 

& 浠ヤ笂杩樺彲浠ュ鍔犱竴浜涜繃婊わ紝姣斿娌℃湁淇敼杩囩殑鐗╀綋涓嶉渶瑕佸仛鏇挎崲绛夌瓑

鎿嶄綔

鐩存帴鍦ㄥ伐鍏锋爮锛孴ools->Prefab->ApplyAll鍗冲彲銆

杞浇淇濈暀锛http://www.cnblogs.com/CodeGize http://www.codegize.com

芦 涓婁竴绡 涓嬩竴绡 禄