Update
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
using DA_Assets.Extensions;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace DA_Assets.Tools
|
||||
{
|
||||
public class SceneBackuper
|
||||
{
|
||||
public static bool TryBackupActiveScene()
|
||||
{
|
||||
try
|
||||
{
|
||||
Scene activeScene = SceneManager.GetActiveScene();
|
||||
bool sceneFileExists = File.Exists(activeScene.path);
|
||||
|
||||
string sceneName = activeScene.name;
|
||||
|
||||
if (sceneName.IsEmpty())
|
||||
{
|
||||
sceneName = "Untitled";
|
||||
}
|
||||
|
||||
int backupNumber = 0;
|
||||
string nameWithoutNumber = sceneName;
|
||||
|
||||
if (sceneName.Contains("-"))
|
||||
{
|
||||
string[] parts = sceneName.Split('-');
|
||||
|
||||
if (parts.Length > 1)
|
||||
{
|
||||
if (int.TryParse(parts.Last(), out int _backupNumber))
|
||||
{
|
||||
backupNumber = _backupNumber;
|
||||
nameWithoutNumber = string.Join("-", parts.Take(parts.Length - 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string backupsPath = GetBackupsPath();
|
||||
backupsPath.CreateFolderIfNotExists();
|
||||
|
||||
string[] backupFiles = Directory.GetFiles(backupsPath, $"{nameWithoutNumber}-*.unity");
|
||||
if (backupFiles.Length > 0)
|
||||
{
|
||||
foreach (string file in backupFiles)
|
||||
{
|
||||
string fileName = Path.GetFileNameWithoutExtension(file);
|
||||
|
||||
if (fileName.Contains("-"))
|
||||
{
|
||||
string[] parts = fileName.Split('-');
|
||||
|
||||
if (parts.Length > 1)
|
||||
{
|
||||
if (int.TryParse(parts.Last(), out int existingBackupNumber))
|
||||
{
|
||||
if (existingBackupNumber > backupNumber)
|
||||
{
|
||||
backupNumber = existingBackupNumber;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
backupNumber++;
|
||||
|
||||
string newName = $"{nameWithoutNumber}-{backupNumber}.unity";
|
||||
string filePath = Path.Combine(backupsPath, newName);
|
||||
|
||||
if (sceneFileExists)
|
||||
{
|
||||
File.Copy(activeScene.path, filePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
UnityEditor.SceneManagement.EditorSceneManager.SaveScene(activeScene, filePath);
|
||||
#endif
|
||||
}
|
||||
|
||||
Debug.Log($"A backup of your scene is created at the path:\r\n{filePath}");
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Error creating scene backup:\r\n{ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetBackupsPath()
|
||||
{
|
||||
string path = Path.Combine("Library", "Backup", "Scenes");
|
||||
return path;
|
||||
}
|
||||
|
||||
public static void MakeActiveSceneDirty()
|
||||
{
|
||||
if (!Application.isPlaying)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user