//アセットの再設定 void RebuildAssetsSub() { cloneAssetPair = new Dictionary <Object, Object>(); //クローンしたアセットにパッキングタグなどの必要な処置をして //テンプレートのアセットとのペアでリスト化する List <string> pathList = UtageEditorToolKit.GetAllAssetPathList(newPath); foreach (string assetpath in pathList) { if (Path.GetExtension(assetpath) == ".unity") { continue; } //クローン元のアセット string oldPath = FilePathUtil.Format(assetpath).Replace(newPath + "/", srcPath + "/"); Object mainAsset = AssetDatabase.LoadMainAssetAtPath(assetpath); if (PrefabUtility.GetPrefabType(mainAsset) == PrefabType.Prefab) { Object oldAsset = AssetDatabase.LoadMainAssetAtPath(oldPath); cloneAssetPair.Add(oldAsset, mainAsset); } else { foreach (Object clone in AssetDatabase.LoadAllAssetsAtPath(assetpath)) { Object oldAsset = AssetDatabase.LoadAssetAtPath(oldPath, clone.GetType()); if (oldAsset != null) { if (cloneAssetPair.ContainsKey(oldAsset)) { Debug.LogWarning(oldPath + " is already contains"); } else { cloneAssetPair.Add(oldAsset, clone); } } } } } float progress = 0.1f; EditorUtility.DisplayProgressBar("DeepDuplicate", "", progress); float delataProgress = (1 - progress) / cloneAssetPair.Values.Count; //クローンしたプレハブやScriptableObject内にテンプレートアセットへのリンクがあったら、クローンアセットのものに変える foreach (Object obj in cloneAssetPair.Values) { EditorUtility.DisplayProgressBar("DeepDuplicate ", obj.name, progress); bool isReplaced = false; if (PrefabUtility.GetPrefabType(obj) == PrefabType.Prefab) { UtageEditorToolKit.ReplaceSerializedPropertiesAllComponents(obj as GameObject, cloneAssetPair); } else { UtageEditorToolKit.ReplaceSerializedProperties(new SerializedObject(obj), cloneAssetPair); } if (isReplaced) { EditorUtility.SetDirty(obj); } progress += delataProgress; } }