部分Scene中的Prefab需要替换成新版的prefab,Scene的数量又比较大,这个时候就需要这个功能了
根据项目的需要再更改下,省了挺多时间
[MenuItem ("Tools/ReplaceSelectPrefab")]
public static void RepalceSelectPrefab () {
//手动选中需要替换的对象
GameObject[] m_objects = Selection.gameObjects;
string path = "Assets/Prefabs/Enemies/Enemy v2.prefab";
GameObject originPrefab = AssetDatabase.LoadAssetAtPath (path, typeof (GameObject)) as GameObject;
if(originPrefab == null)
{
Debug.LogError("originPrefab is null" + path);
}else
{
Replace(m_objects, originPrefab);
}
}
[MenuItem ("Tools/ReplaceTypePrefab")]
public static void RepalceTypePrefab () {
//根据类型限制替换prefab
GameObject[] m_objects = GameObject.FindObjectsOfType(typeof(BodyDof)) as GameObject[];
string path = "Assets/Prefabs/Enemies/Enemy v2.prefab";
GameObject originPrefab = AssetDatabase.LoadAssetAtPath (path, typeof (GameObject)) as GameObject;
if(originPrefab == null)
{
Debug.LogError("originPrefab is null" + path);
}else
{
Replace(m_objects, originPrefab);
}
}
private static void Replace (GameObject[] target, GameObject originPrefab) {
foreach (GameObject item in target) {
GameObject newPrefab = PrefabUtility.InstantiatePrefab (originPrefab) as GameObject;
if (newPrefab != null) {
newPrefab.transform.position = item.transform.position;
newPrefab.transform.parent = item.transform.parent;
GameObject.DestroyImmediate(item);
} else {
Debug.Log ("load prefab is null Enemy New");
}
}
EditorSceneManager.MarkAllScenesDirty ();
}