NLDClient-yudde/ProjectNLD/Assets/Editor/Scene/PostProcesser/ScenePostProcessor.cs

53 lines
2.0 KiB
C#
Raw Normal View History

2024-01-15 20:25:49 +08:00
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ScenePostProcessor : PostProcessor
{
private Scene Scene { get; set; }
private Scene ClonedScene { get; set; }
protected override string ResourcesBaseDir => SCENE_POSTPROCESS_DIR;
protected override string PostProcessFolderName => Path.GetFileNameWithoutExtension(Scene.path.Replace("/", "_"));
2024-01-16 18:37:02 +08:00
protected override Object AssetToPostProcess => AssetDatabase.LoadAssetAtPath<SceneAsset>(Scene.path);
protected override string OutputAssetPath =>
$"{ProcessedResourceDir}/{Scene.name}_{SCENE_POST_PROCESS_NAME}.unity";
2024-01-15 20:25:49 +08:00
protected override void Init(PostProcessInstructor postProcessInstructor)
{
base.Init(postProcessInstructor);
Scene = postProcessInstructor.gameObject.scene;
}
protected override PostProcessInstructor Clone()
{
var sceneCount = SceneManager.sceneCount;
for (int i = 0; i < sceneCount; i++)
{
var scene = SceneManager.GetSceneAt(i);
if (scene.name.Contains(SCENE_POST_PROCESS_NAME))
EditorSceneManager.CloseScene(scene, true);
}
2024-01-16 18:37:02 +08:00
AssetDatabase.CopyAsset(Scene.path, OutputAssetPath);
2024-01-15 20:25:49 +08:00
AssetDatabase.Refresh();
2024-01-16 18:37:02 +08:00
ClonedScene = EditorSceneManager.OpenScene(OutputAssetPath, OpenSceneMode.Additive);
2024-01-15 20:25:49 +08:00
EditorSceneManager.MarkAllScenesDirty();
var result = FindInstructorInScene(ClonedScene);
return result;
}
protected override void AfterAll(bool destroyAfterPostProcess)
{
EditorSceneManager.SaveOpenScenes();
EditorUtil.AddPathToAddressable(ProcessedResourceDir, SCENE_ADDRESSABLE_GROUP);
if (destroyAfterPostProcess)
EditorSceneManager.CloseScene(ClonedScene, true);
EditorGUIUtility.PingObject(AssetDatabase.LoadAssetAtPath<SceneAsset>(ClonedScene.path));
}
}