Ejemplo n.º 1
0
        //アセットの再設定
        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;
            }
        }