Example #1
0
        public static void RegisterAssetsReference(string searchRootDirectory,
                                                   string exportDirectoryPath,
                                                   string exportFilePrefix           = "export",
                                                   RegisterFileType registerFileType = RegisterFileType.all,
                                                   bool distoributeParentFlag        = false,
                                                   int hierarchyNumber = 1,
                                                   ThreedObjectControlEditor.ExportReferenceFileExtention exportFileExtention = ThreedObjectControlEditor.ExportReferenceFileExtention.asset)
        {
            Type   filterClassType = typeof(UnityEngine.Object);
            string filterWord      = "*";

            if (registerFileType == RegisterFileType.prefab)
            {
                filterWord      = "prefab";
                filterClassType = typeof(GameObject);
            }
            else if (registerFileType == RegisterFileType.anim)
            {
                filterWord      = "anim";
                filterClassType = typeof(AnimationClip);
            }
            else if (registerFileType == RegisterFileType.audio)
            {
                filterClassType = typeof(AudioClip);
            }
            else if (registerFileType == RegisterFileType.sprite)
            {
                filterClassType = typeof(Sprite);
            }
            List <string> pathes = FindAllThreedSearchDirectory(searchRootDirectory, filterWord);
            Dictionary <UnityEngine.Object, string> objectToPathes = new Dictionary <UnityEngine.Object, string>();

            for (int i = 0; i < pathes.Count; ++i)
            {
                string             path = pathes[i];
                UnityEngine.Object obj  = AssetDatabase.LoadAssetAtPath(path, filterClassType);
                if (obj == null)
                {
                    continue;
                }
                objectToPathes.Add(obj, path);
            }
            CheckAndCreateDirectory(exportDirectoryPath);

            Dictionary <string, List <UnityEngine.Object> > filePrefixObjectList = new Dictionary <string, List <UnityEngine.Object> >();

            foreach (KeyValuePair <UnityEngine.Object, string> objectToPath in objectToPathes)
            {
                string[] splitPath      = objectToPath.Value.Split("/".ToCharArray());
                string   prefixFileName = exportFilePrefix;
                if (distoributeParentFlag && splitPath.Length > hierarchyNumber)
                {
                    prefixFileName = splitPath[splitPath.Length - (hierarchyNumber + 1)];
                }
                string filePrefix = exportDirectoryPath + prefixFileName;
                if (!filePrefixObjectList.ContainsKey(filePrefix))
                {
                    filePrefixObjectList.Add(filePrefix, new List <UnityEngine.Object>());
                }
                filePrefixObjectList[filePrefix].Add(objectToPath.Key);
            }

            foreach (KeyValuePair <string, List <UnityEngine.Object> > filePrefixObject in filePrefixObjectList)
            {
                filePrefixObject.Value.Sort((a, b) => string.Compare(a.name, b.name));
            }

            if (exportFileExtention == ThreedObjectControlEditor.ExportReferenceFileExtention.asset)
            {
                List <UnityEngine.Object> dbList = new List <UnityEngine.Object>();
                AssetDatabase.StartAssetEditing();
                foreach (KeyValuePair <string, List <UnityEngine.Object> > filePrefixObject in filePrefixObjectList)
                {
                    UnityScriptableObject db = LoadOrCreateDB(filePrefixObject.Key + ".asset", typeof(UnityScriptableObject)) as UnityScriptableObject;
                    db.SetObjects(filePrefixObject.Value.ToArray());
                    dbList.Add(db);
                }
                AssetDatabase.StopAssetEditing();
                for (int i = 0; i < dbList.Count; ++i)
                {
                    EditorUtility.SetDirty(dbList[i]);
                }
            }
            else if (exportFileExtention == ThreedObjectControlEditor.ExportReferenceFileExtention.csv || exportFileExtention == ThreedObjectControlEditor.ExportReferenceFileExtention.json)
            {
                foreach (KeyValuePair <string, List <UnityEngine.Object> > filePrefixObject in filePrefixObjectList)
                {
                    List <string>             filePathes     = new List <string>();
                    List <UnityEngine.Object> gameObjectList = filePrefixObject.Value.ToList();
                    for (int i = 0; i < gameObjectList.Count; ++i)
                    {
                        filePathes.Add(objectToPathes[gameObjectList[i]]);
                    }

                    if (exportFileExtention == ThreedObjectControlEditor.ExportReferenceFileExtention.csv)
                    {
                        File.WriteAllText(filePrefixObject.Key + ".csv", string.Join("\n", filePathes.ToArray()));
                    }
                    else
                    {
                        if (filePathes.Count > 0)
                        {
                            File.WriteAllText(filePrefixObject.Key + ".json", "[\"" + string.Join("\",\"", filePathes.ToArray()) + "\"]");
                        }
                        else
                        {
                            File.WriteAllText(filePrefixObject.Key + ".json", "[]");
                        }
                    }
                }
            }
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
            Debug.Log("Register Object Count:" + objectToPathes.Count);
        }
        void OnGUI()
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Export Mode");
            FileExportEditor.Mode currentExportMode = (FileExportEditor.Mode)EditorGUILayout.EnumPopup((FileExportEditor.Mode)PlayerPrefs.GetInt("FileExportEditor_Export_Mode", (int)FileExportEditor.Mode.ConvertToPrefab));
            if (currentExportMode != exportMode)
            {
                exportMode = currentExportMode;
                PlayerPrefs.SetInt("FileExportEditor_Export_Mode", (int)exportMode);
            }
            EditorGUILayout.EndHorizontal();

            if (exportMode == FileExportEditor.Mode.ConvertToPrefab)
            {
                GUILayout.BeginHorizontal();
                int exportMaterialFileFlag = PlayerPrefs.GetInt("FileExportEditor_Export_Material_Files", 1);
                EditorGUILayout.LabelField("Export with material files?");
                exportMaterialFiles = EditorGUILayout.Toggle(exportMaterialFileFlag == 1);
                PlayerPrefs.SetInt("FileExportEditor_Export_Material_Files", exportMaterialFiles ? 1 : 0);
                EditorGUILayout.EndHorizontal();
            }

            GUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Distribute with the parent directory?");
            distoributeParentFlag = EditorGUILayout.Toggle(distoributeParentFlag);
            EditorGUILayout.EndHorizontal();

            if (distoributeParentFlag)
            {
                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Refer hierarchy parent number");
                hierarchyNumber = EditorGUILayout.IntField(hierarchyNumber);
                EditorGUILayout.EndHorizontal();
            }

            if (exportMode == FileExportEditor.Mode.CaptureSceneImage)
            {
                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Capture Image Width");
                captureImageWidth = EditorGUILayout.IntField(captureImageWidth);
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Capture Image Height");
                captureImageHeight = EditorGUILayout.IntField(captureImageHeight);
                GUILayout.EndHorizontal();
            }

            // Unity EditorのUI
            GUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Search Root Directory");
            searchRootDirectory = (string)EditorGUILayout.TextField(PlayerPrefs.GetString("FileExportEditor_Search_Root_Directory", searchRootDirectory));
            PlayerPrefs.SetString("FileExportEditor_Search_Root_Directory", searchRootDirectory);
            GUILayout.EndHorizontal();

            List <string> values           = new List <string>();
            Array         exportImageFiles = Enum.GetValues(typeof(ThreedObjectControlEditor.SearchThreedObjectFileExtention));

            for (int i = 0; i < exportImageFiles.Length; ++i)
            {
                ThreedObjectControlEditor.SearchThreedObjectFileExtention ext = (ThreedObjectControlEditor.SearchThreedObjectFileExtention)exportImageFiles.GetValue(i);
                if (ext == ThreedObjectControlEditor.SearchThreedObjectFileExtention.prefab)
                {
                    continue;
                }
                values.Add(ext.ToString());
            }

            if (exportMode == FileExportEditor.Mode.ConvertToPrefab || exportMode == FileExportEditor.Mode.DissociateAnimationClip)
            {
                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Search File Extention");
                threedObjectSearchFileExtention = (ThreedObjectControlEditor.SearchThreedObjectFileExtention)EditorGUILayout.Popup(PlayerPrefs.GetInt("FileExportEditor_Search_File_Extention", (int)threedObjectSearchFileExtention), values.ToArray());
                PlayerPrefs.SetInt("FileExportEditor_Search_File_Extention", (int)threedObjectSearchFileExtention);
                GUILayout.EndHorizontal();
            }
            else if (exportMode == FileExportEditor.Mode.RegisterAssetsReference)
            {
                referenceSearchFilterFileExtention = (ThreedObjectControlEditor.RegisterFileType)PlayerPrefs.GetInt("FileExportEditor_Reference_Search_Filter_File_Extention", (int)referenceSearchFilterFileExtention);

                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Search File Extention");
                referenceSearchFilterFileExtention = (ThreedObjectControlEditor.RegisterFileType)EditorGUILayout.EnumPopup(referenceSearchFilterFileExtention);
                GUILayout.EndHorizontal();
                PlayerPrefs.SetInt("FileExportEditor_Reference_Search_Filter_File_Extention", (int)referenceSearchFilterFileExtention);
            }
            if (exportMode == FileExportEditor.Mode.RegisterAssetsReference && !distoributeParentFlag)
            {
                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Export File Name");
                referenceExportFileName = EditorGUILayout.TextField(referenceExportFileName);
                GUILayout.EndHorizontal();
            }

            GUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Export Directory");
            exportDirectoryPath = (string)EditorGUILayout.TextField(PlayerPrefs.GetString("FileExportEditor_Export_Directory", exportDirectoryPath));
            PlayerPrefs.SetString("FileExportEditor_Export_Directory", exportDirectoryPath);
            GUILayout.EndHorizontal();

            if (exportMode == FileExportEditor.Mode.CaptureSceneImage)
            {
                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Export File Extention");
                imageExportFileExtention = (ThreedObjectControlEditor.ExportImageFileExtention)EditorGUILayout.EnumPopup((ThreedObjectControlEditor.ExportImageFileExtention)PlayerPrefs.GetInt("FileExportEditor_Export_File_Extention", (int)imageExportFileExtention));
                PlayerPrefs.SetInt("FileExportEditor_Export_File_Extention", (int)imageExportFileExtention);
                GUILayout.EndHorizontal();
            }
            else if (exportMode == FileExportEditor.Mode.RegisterAssetsReference)
            {
                GUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Export File Extention");
                referenceExportFileExtention = (ThreedObjectControlEditor.ExportReferenceFileExtention)EditorGUILayout.EnumPopup((ThreedObjectControlEditor.ExportReferenceFileExtention)PlayerPrefs.GetInt("FileExportEditor_Export_Reference_File_Extention", (int)referenceExportFileExtention));
                PlayerPrefs.SetInt("FileExportEditor_Export_Reference_File_Extention", (int)referenceExportFileExtention);
                GUILayout.EndHorizontal();
            }
            PlayerPrefs.Save();
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button(new GUIContent("Execute")))
            {
                if (string.IsNullOrEmpty(searchRootDirectory))
                {
                    return;
                }

                if (exportMode == FileExportEditor.Mode.CaptureSceneImage)
                {
                    ThreedObjectControlEditor.CaptureImage(searchRootDirectory, exportDirectoryPath, Camera.main, captureImageWidth, captureImageHeight, distoributeParentFlag: distoributeParentFlag, hierarchyNumber: hierarchyNumber);
                }
                else if (exportMode == FileExportEditor.Mode.ConvertToPrefab)
                {
                    ThreedObjectControlEditor.ConvertToPrefab(searchRootDirectory, exportDirectoryPath, searchFileExtention: threedObjectSearchFileExtention, distoributeParentFlag: distoributeParentFlag, isExportMaterialFiles: exportMaterialFiles, hierarchyNumber: hierarchyNumber);
                }
                else if (exportMode == FileExportEditor.Mode.DissociateAnimationClip)
                {
                    ThreedObjectControlEditor.DissociateAnimationClip(searchRootDirectory, exportDirectoryPath, searchFileExtention: threedObjectSearchFileExtention, distoributeParentFlag: distoributeParentFlag, hierarchyNumber: hierarchyNumber);
                }
                else if (exportMode == FileExportEditor.Mode.RegisterAssetsReference)
                {
                    ThreedObjectControlEditor.RegisterAssetsReference(searchRootDirectory, exportDirectoryPath, exportFilePrefix: referenceExportFileName, registerFileType: referenceSearchFilterFileExtention, distoributeParentFlag: distoributeParentFlag, hierarchyNumber: hierarchyNumber, exportFileExtention: referenceExportFileExtention);
                }
            }
            GUILayout.EndHorizontal();
        }