鍦║nity浣跨敤Prefab杩囩▼涓紝鎴戜滑鏈夋椂鍊欓渶瑕佽繘琛孭refab瀹炰緥鏂紑寮曠敤鍜屾浛鎹㈠紩鐢ㄧ殑闇姹傘傚疄鐜拌繖浜涢渶姹傦紝浣跨敤鍒扮殑鏍稿績鐨勭被鏄疨refabUtility銆侾refabUtility鏄竴涓潤鎬佺被锛屼富瑕佺敤浜庤繘琛孭refab鐨勭浉鍏冲鐞嗐 杩欓噷涓昏浣跨敤浠ヤ笅鍑犵鏂规硶
- PrefabUtility.CreateEmptyPrefab
- PrefabUtility.ReplacePrefab
- PrefabUtility.DisconnectPrefabInstance
- PrefabUtility.GetPrefabParent
- PrefabUtility.ConnectGameObjectToPrefab
鏂紑寮曠敤
鏂紑Prefab寮曠敤鐨勪唬鐮佸涓
[MenuItem("Tools/Prefab/鍘婚櫎寮曠敤")]
public static void BreakPrefabRef()
{
var select = Selection.activeGameObject;
if (select.activeInHierarchy)
{
PrefabUtility.DisconnectPrefabInstance(select);
Selection.activeGameObject = null;
var prefab = PrefabUtility.CreateEmptyPrefab("Assets/empty.prefab");
PrefabUtility.ReplacePrefab(select, prefab, ReplacePrefabOptions.ConnectToPrefab);
PrefabUtility.DisconnectPrefabInstance(select);
AssetDatabase.DeleteAsset("Assets/empty.prefab");
}
}
铏界劧PrefabUtility.DisconnectPrefabInstance鏈夋柇寮Prefab鐨勫惈涔夛紝浣嗘槸濡傛灉浠呬粎浣跨敤杩欎釜鍑芥暟浼氬嚭鐜颁笅闈㈣繖涓儏鍐碉紝鍚嶅瓧鐨勯鑹蹭粠钃濆彉鐧斤紝鐪嬭捣鏉ュ凡缁忎笉鏄竴涓猵refab锛屼絾鏄粠Inspector闈㈡澘涓繕鏄兘澶熺湅鍒癙refab鏍囪浠ュ強Prefab瀹炰緥鎵嶄細鍑虹幇鐨勯偅涓変釜Select銆丷evert銆丄pply鎸夐挳銆
濡傛灉灏濊瘯鍦ㄨ繖涓椂鍊欏垹闄ゆ帀Project閲岄潰鐨勬簮prefab锛屽彂鐜拌繖涓猵refab鏍囪灏辨秷澶变簡銆
鍥犳锛岃繖閲岄噰鐢ㄤ互涓嬫柟娉曞疄鐜版暣涓柇寮寮曠敤
- 浣跨敤Selection.activeGameObject鑾峰彇褰撳墠閫変腑鐨勭墿浣
- 浣跨敤PrefabUtility.CreateEmptyPrefab鍏堝垱寤轰竴涓┖鐨刾refab
- 浣跨敤PrefabUtility.ReplacePrefab灏嗗満鏅腑閫変腑鐨凱refab瀹炰緥鍒朵綔鎴愪竴涓狿refab骞惰鐩栧埌涔嬪墠鐨勭┖prefab涓
- 浣跨敤PrefabUtility.DisconnectPrefabInstance鏂紑寮曠敤
- 浣跨敤AssetDatabase.DeleteAsset鍒犻櫎Project涓柊寤虹殑prefab
鑷虫灏卞畬鎴愪簡鏂紑寮曠敤鐨勫姛鑳姐傝繖閲屽湪鍑芥暟鍔犱笂[menuitem]鏍囩锛屽皢杩欎釜鍔熻兘鏀惧湪unity鑿滃崟鈥淭ools->Prefab->鍘婚櫎寮曠敤鈥濅笂銆
鏇挎崲寮曠敤
鏇挎崲寮曠敤鐨勪唬鐮佸涓
[MenuItem("Tools/Prefab/鏇挎崲寮曠敤")]
public static void RelocalPrefabRef()
{
var select = Selection.activeGameObject;
if (select.activeInHierarchy)
{
var ab = PrefabUtility.GetPrefabParent(select);
if (ab == null)
return;
var oripath = AssetDatabase.GetAssetPath(ab);
var filters = new[] { "prefab file", "prefab" };
var tar = EditorUtility.OpenFilePanelWithFilters("select target", Application.dataPath, filters);
if (string.IsNullOrEmpty(tar))
return;
tar = FileUtil.GetProjectRelativePath(tar);
var tarprefab = AssetDatabase.LoadAssetAtPath<GameObject>(tar);
if (tarprefab == null)
return;
var gname = select.name;
var enable = select.activeInHierarchy;
var pos = select.transform.localPosition;
var rot = select.transform.localRotation;
var scale = select.transform.localScale;
var go = PrefabUtility.ConnectGameObjectToPrefab(select, tarprefab);
go.transform.localPosition = pos;
go.transform.localRotation = rot;
go.transform.localScale = scale;
go.name = gname;
go.SetActive(enable);
Debug.LogFormat("Replace Prefab From:{0} to {1}", oripath, tar);
}
}
浠g爜涓富瑕佺殑娴佺▼涓
- 浣跨敤Selection.activeGameObject鑾峰彇閫変腑鐨勭墿浣
- 浣跨敤PrefabUtility.GetPrefabParent鑾峰彇杩欎釜鐗╀綋鍦╬roject涓殑婧恜refab
- 浣跨敤AssetDatabase.GetAssetPath鑾峰彇婧恜refab鍦╬roject涓殑璺緞锛堝悗闈㈢敤浜巐og锛
- 浣跨敤EditorUtility.OpenFilePanelWithFilters鎵撳紑涓涓枃浠堕夋嫨绐楀彛璁╃帺瀹堕夋嫨涓涓簮prefab
- 浣跨敤FileUtil.GetProjectRelativePath鑾峰彇杩欎釜婧恜refab鐩稿浜庡伐绋嬬殑璺緞
- 浣跨敤灏嗚繖涓簮prefab鍔犺浇鍒板唴瀛樹腑
- 涓轰簡淇濇寔鏇挎崲鍚庣殑浣嶇疆鍏崇郴锛岃繖閲岃褰曚簡鍘熸潵鐨勪綅缃俊鎭
- 浣跨敤PrefabUtility.ConnectGameObjectToPrefab閲嶆柊灏嗛変腑鐨勭墿浣撻摼鎺ュ埌鐜╁閫夋嫨鐨勬簮prefab涓婏紝瀹屾垚prefab寮曠敤鏇挎崲
- 杩樺師鍘熸潵鐨勪綅缃叧绯
鑷虫瀹屾垚浜哖refab瀹炰緥鏇挎崲寮曠敤鐨勫姛鑳姐傚湪Unity涓夋嫨鑿滃崟Tools->Prefab->鏇挎崲寮曠敤锛岄夋嫨涓涓猵refab鍗冲彲瀹炵幇鏇挎崲
杞浇淇濈暀锛http://www.cnblogs.com/CodeGize http://www.codegize.com