예제 #1
0
        public static void GenerateSceneNames()
        {
            var editorConfig        = ProjectFolders.Instance;
            var sceneImporterConfig = SceneImporterConfig.Instance;

            ScenesScriptGenerator.Generate(sceneImporterConfig.ManagedFolders, editorConfig.ScriptPath);
        }
예제 #2
0
        public static void GenerateAll()
        {
            var editorConfig        = ProjectFolders.Instance;
            var sceneImporterConfig = SceneImporterConfig.Instance;

            // SceneNames.
            ScenesScriptGenerator.Generate(sceneImporterConfig.ManagedFolders, editorConfig.ScriptPath);

            // Tags.
            TagsScriptGenerator.Generate(editorConfig.ScriptPath);

            // Layers.
            LayersScriptGenerator.Generate(editorConfig.ScriptPath);

            // SortingLayers.
            SortingLayersScriptGenerator.Generate(editorConfig.ScriptPath);
        }
예제 #3
0
        /// <summary>
        /// あらゆる種類の任意の数のアセットがインポートが完了したときに呼ばれる処理です。
        /// </summary>
        /// <param name="importedAssets"> インポートされたアセットのファイルパス。 </param>
        /// <param name="deletedAssets"> 削除されたアセットのファイルパス。 </param>
        /// <param name="movedAssets"> 移動されたアセットのファイルパス。 </param>
        /// <param name="movedFromPath"> 移動されたアセットの移動前のファイルパス。 </param>
        static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromPath)
        {
            var editorConfig        = ProjectFolders.Instance;
            var sceneImporterConfig = SceneImporterConfig.Instance;

            if (sceneImporterConfig == null)
            {
                return;
            }

            var sceneFileExtension = SceneImporterConfig.SceneFileExtension;

            // ビルドセッティングファイルの更新時.
            if (importedAssets.Any(x => Path.GetFileName(x) == BuildSettingsFileName))
            {
                var buildTargetScenes = EditorBuildSettings.scenes;
                var scenes            = buildTargetScenes.DistinctBy(x => x.path).ToArray();

                if (scenes.Length != buildTargetScenes.Length)
                {
                    EditorBuildSettings.scenes = scenes;
                    ScenesScriptGenerator.Generate(sceneImporterConfig.ManagedFolders, editorConfig.EditorScriptPath);
                    AssetDatabase.SaveAssets();

                    EditorUtility.DisplayDialog("SceneAssetPostprocessor", "ビルドターゲットに入っているシーンの\n重複項目を削除しました", "確認");
                }
            }

            var assetPaths = new[] { importedAssets, deletedAssets, movedFromPath, movedAssets }.SelectMany(x => x);

            if (assetPaths.Any(x => Path.GetExtension(x) == sceneFileExtension))
            {
                var isChanged = false;

                var autoAdditionFolders = sceneImporterConfig.ManagedFolders;
                var buildTargetScenes   = EditorBuildSettings.scenes.ToDictionary(x => x.path);

                //--------------------------------------------------------------------
                // 移動 (ビルド対象から外れる場合).
                //--------------------------------------------------------------------

                for (var i = 0; i < movedAssets.Length; ++i)
                {
                    isChanged = true;

                    if (!buildTargetScenes.ContainsKey(movedAssets[i]))
                    {
                        continue;
                    }

                    // ビルド対象フォルダ内の移動は除外処理しない.
                    if (autoAdditionFolders.Any(y => movedAssets[i].StartsWith(y)))
                    {
                        continue;
                    }

                    // ビルドターゲットに入っているシーンが移動した場合ビルド対象から外す.
                    buildTargetScenes.Remove(movedAssets[i]);
                }

                //--------------------------------------------------------------------
                // 移動 (ビルド対象に追加される場合.).
                //--------------------------------------------------------------------

                // .unity かつ、自動追加対象フォルダ以下のファイルパスを取得.
                var movedInScenes = movedAssets
                                    .Where(x => Path.GetExtension(x) == sceneFileExtension)
                                    .Where(x => autoAdditionFolders.Any(y => x.StartsWith(y)));

                foreach (var movedInScene in movedInScenes)
                {
                    if (buildTargetScenes.ContainsKey(movedInScene))
                    {
                        continue;
                    }

                    // buildTargetScenesに入っていない物を追加.
                    buildTargetScenes[movedInScene] = new EditorBuildSettingsScene(movedInScene, true);

                    isChanged = true;
                }

                //--------------------------------------------------------------------
                // リネーム.
                //--------------------------------------------------------------------

                for (var i = 0; i < movedAssets.Length; ++i)
                {
                    if (!buildTargetScenes.ContainsKey(movedAssets[i]))
                    {
                        continue;
                    }

                    // 別ディレクトリなら「ファイル移動」なので処理しない.
                    if (Path.GetDirectoryName(movedAssets[i]) != Path.GetDirectoryName(movedFromPath[i]))
                    {
                        continue;
                    }

                    if (Path.GetFileName(movedAssets[i]) != Path.GetFileName(movedFromPath[i]))
                    {
                        isChanged = true;
                    }
                }

                //--------------------------------------------------------------------
                // 削除.
                //--------------------------------------------------------------------

                foreach (var deletedAsset in deletedAssets)
                {
                    if (!buildTargetScenes.ContainsKey(deletedAsset))
                    {
                        continue;
                    }

                    // ビルドターゲットに入っているシーンが消されたらビルド対象から外す.
                    buildTargetScenes.Remove(deletedAsset);
                    isChanged = true;
                }

                //--------------------------------------------------------------------
                // 追加.
                //--------------------------------------------------------------------

                // .unity かつ、自動追加対象フォルダ以下のファイルパスを取得.
                var addScenes = importedAssets
                                .Where(x => Path.GetExtension(x) == sceneFileExtension)
                                .Where(x => autoAdditionFolders.Any(y => x.StartsWith(y)));

                foreach (var addScene in addScenes)
                {
                    if (buildTargetScenes.ContainsKey(addScene))
                    {
                        continue;
                    }

                    // buildTargetScenesに入っていない物を追加.
                    buildTargetScenes[addScene] = new EditorBuildSettingsScene(addScene, true);
                    isChanged = true;
                }

                if (isChanged)
                {
                    ScenesInBuildGenerator.UpdateBuildTargetScenes(sceneImporterConfig, editorConfig.ScriptPath, buildTargetScenes);
                }
            }
        }