/// <summary> /// Connect copied objects to prefabs if original object is connected, and sets helper reference back to new prefab reference /// Also recursively calls itself in all children /// </summary> /// <param name="toMine">Whether we are copying theirs to mine (true) or mie to theirs (false)</param> void ConnectPrefabsAfterCopy(bool toMine) { var original = toMine ? theirs : mine; var copy = toMine ? mine : theirs; if (Util.IsPrefabParent(original) && PrefabUtility.GetPrefabType(original) == PrefabType.PrefabInstance) { copy = PrefabUtility.ConnectGameObjectToPrefab(copy, (GameObject)PrefabUtility.GetPrefabParent(original)); copy.name = original.name; // ConnectPrefab will rename to prefab name // ConnectPrefab will override transform var copyTransform = copy.transform; var originalTransform = original.transform; copyTransform.localPosition = originalTransform.localPosition; copyTransform.localRotation = originalTransform.localRotation; copyTransform.localScale = originalTransform.localScale; } if (toMine) { mine = copy; } else { theirs = copy; } if (children != null) { foreach (var child in children) { child.ConnectPrefabsAfterCopy(toMine); } } }