Skip to content

Commit c56fe05

Browse files
committed
Created MemorySnapshotArchiver
1 parent 9feb0b8 commit c56fe05

File tree

8 files changed

+246
-2
lines changed

8 files changed

+246
-2
lines changed

Editor.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/MemorySnapshotArchiver.cs

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
// **************************************************************** //
2+
//
3+
// Copyright (c) RimuruDev. All rights reserved.
4+
// Contact me:
5+
// - Gmail: [email protected]
6+
// - LinkedIn: https://www.linkedin.com/in/rimuru/
7+
// - GitHub: https://github.com/RimuruDev
8+
//
9+
// **************************************************************** //
10+
11+
#if UNITY_EDITOR
12+
using System.IO;
13+
using UnityEditor;
14+
using UnityEngine;
15+
16+
namespace RimuruDev
17+
{
18+
public sealed class MemorySnapshotArchiver : EditorWindow
19+
{
20+
private string sourceDir;
21+
private string destinationDir;
22+
23+
[MenuItem("RimuruDev Tools/Archive Memory Snapshots")]
24+
public static void ShowWindow() =>
25+
GetWindow<MemorySnapshotArchiver>("Memory Snapshot Archiver");
26+
27+
private void OnEnable()
28+
{
29+
sourceDir = EditorPrefs.GetString("MemorySnapshotArchiver_SourceDir", string.Empty);
30+
destinationDir = EditorPrefs.GetString("MemorySnapshotArchiver_DestinationDir", string.Empty);
31+
}
32+
33+
private void OnGUI()
34+
{
35+
GUILayout.Label("Настройки архивации снимков памяти", EditorStyles.boldLabel);
36+
37+
if (string.IsNullOrEmpty(sourceDir))
38+
sourceDir = "Выберите папку исходных снимков";
39+
40+
if (string.IsNullOrEmpty(destinationDir))
41+
destinationDir = "Выберите папку назначения";
42+
43+
sourceDir = EditorGUILayout.TextField("Папка исходных снимков", sourceDir);
44+
destinationDir = EditorGUILayout.TextField("Папка назначения", destinationDir);
45+
46+
if (GUILayout.Button("Выбрать папку исходных снимков"))
47+
{
48+
var selectedSourceDir =
49+
EditorUtility.OpenFolderPanel("Выбрать папку исходных снимков", sourceDir, string.Empty);
50+
51+
if (!string.IsNullOrEmpty(selectedSourceDir))
52+
sourceDir = selectedSourceDir;
53+
}
54+
55+
if (GUILayout.Button("Выбрать папку назначения"))
56+
{
57+
var selectedDestinationDir =
58+
EditorUtility.OpenFolderPanel("Выбрать папку назначения", destinationDir, string.Empty);
59+
60+
if (!string.IsNullOrEmpty(selectedDestinationDir))
61+
destinationDir = selectedDestinationDir;
62+
}
63+
64+
if (GUILayout.Button("Сохранить пути"))
65+
{
66+
if (!string.IsNullOrEmpty(sourceDir) && sourceDir != "Выберите папку исходных снимков")
67+
EditorPrefs.SetString("MemorySnapshotArchiver_SourceDir", sourceDir);
68+
69+
if (!string.IsNullOrEmpty(destinationDir) && destinationDir != "Выберите папку назначения")
70+
EditorPrefs.SetString("MemorySnapshotArchiver_DestinationDir", destinationDir);
71+
72+
Debug.Log("<color=yellow>Пути сохранены.</color>");
73+
}
74+
75+
if (GUILayout.Button("Архивировать снимки"))
76+
{
77+
if (!Directory.Exists(sourceDir) || !Directory.Exists(destinationDir))
78+
Debug.LogError("<color=red>Ошибка: Оба пути должны быть выбраны и существовать.</color>");
79+
else
80+
ArchiveSnapshots();
81+
}
82+
}
83+
84+
private void ArchiveSnapshots()
85+
{
86+
if (!Directory.Exists(destinationDir))
87+
Directory.CreateDirectory(destinationDir);
88+
89+
var snapshotFiles = Directory.GetFiles(sourceDir, "*.snap");
90+
var snapshotImages = Directory.GetFiles(sourceDir, "*.png");
91+
92+
foreach (var file in snapshotFiles)
93+
{
94+
var fileName = Path.GetFileName(file);
95+
var destFile = Path.Combine(destinationDir, fileName);
96+
97+
File.Move(file, destFile);
98+
99+
Debug.Log($"<color=yellow>Archived {fileName} to {destinationDir}</color>");
100+
}
101+
102+
foreach (var file in snapshotImages)
103+
{
104+
var fileName = Path.GetFileName(file);
105+
var destFile = Path.Combine(destinationDir, fileName);
106+
107+
File.Move(file, destFile);
108+
109+
Debug.Log($"<color=yellow>Archived {fileName} to {destinationDir}.</color>");
110+
}
111+
112+
AssetDatabase.Refresh();
113+
114+
Debug.Log("<color=yellow>Все снимки архивированы.</color>");
115+
}
116+
}
117+
}
118+
#endif

Editor/MemorySnapshotArchiver.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

LICENSE.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,58 @@
1-
# Unity-MemoryProfiler-Snapshot-Archiver
2-
1+
# Unity Memory Profiler Snapshot Archiver
2+
3+
## Описание
4+
5+
Этот инструмент разработан для разработчиков, использующих Unity на macOS, которые сталкиваются с ограничениями дискового пространства, например, на MacBook'ах с небольшим объемом SSD. `Memory Profiler Snapshot Archiver` позволяет архивировать снимки памяти, созданные в Unity Memory Profiler, на внешний диск. Это помогает освобождать место на основном диске, сохраняя возможность позже проанализировать данные или сохранить их для истории.
6+
7+
## Установка
8+
9+
### Установка через Unity Package Manager
10+
11+
1. Откройте ваш проект в Unity.
12+
2. Перейдите в `Window -> Package Manager`.
13+
3. Нажмите на иконку `+` в левом верхнем углу окна Package Manager.
14+
4. Выберите `Add package from git URL...`.
15+
5. Введите URL вашего репозитория:
16+
17+
```
18+
https://github.com/RimuruDev/Unity-MemoryProfiler-Snapshot-Archiver.git
19+
```
20+
21+
6. Нажмите `Add`. Пакет будет добавлен в ваш проект.
22+
23+
### Установка через скачанный релиз
24+
25+
1. Перейдите на страницу [Releases](https://github.com/RimuruDev/Unity-MemoryProfiler-Snapshot-Archiver/releases) вашего репозитория.
26+
2. Скачайте последний релиз пакета.
27+
3. Разархивируйте пакет в директорию `Packages` вашего проекта Unity.
28+
4. Убедитесь, что пакет появился в списке установленных в `Window -> Package Manager`.
29+
30+
## Использование
31+
32+
После установки пакета:
33+
34+
1. Откройте Unity и перейдите в `RimuruDev Tools -> Archive Memory Snapshots`.
35+
2. Откроется окно, где вы сможете настроить пути для архивации снимков памяти.
36+
37+
- **Папка исходных снимков**: Укажите папку, где Unity сохраняет снимки памяти. Обычно это папка внутри вашего проекта.
38+
- **Папка назначения**: Укажите папку на внешнем диске, куда будут перемещены архивированные снимки.
39+
40+
3. Используйте кнопки `Выбрать папку исходных снимков` и `Выбрать папку назначения`, чтобы выбрать нужные директории.
41+
4. Нажмите `Сохранить пути`, чтобы сохранить указанные пути. Они будут загружены автоматически при следующем запуске Unity.
42+
5. Нажмите `Архивировать снимки`, чтобы переместить снимки памяти и связанные изображения из исходной папки в папку назначения.
43+
44+
## Преимущества
45+
46+
- **Экономия места**: Снимки памяти могут занимать значительное место на диске, особенно если их много. Перемещая их на внешний диск, вы освобождаете место на основном накопителе.
47+
- **Сохранение данных**: Архивирование снимков позволяет сохранить их для последующего анализа, вместо того чтобы удалять их из-за нехватки места.
48+
49+
## Автор
50+
51+
- **RimuruDev**
52+
53+
- LinkedIn: [linkedin.com/in/rimuru](https://www.linkedin.com/in/rimuru/)
54+
- GitHub: [github.com/RimuruDev](https://github.com/RimuruDev)
55+
56+
## Лицензия
57+
58+
Этот проект распространяется под лицензией MIT. Подробности смотрите в файле [LICENSE](https://github.com/RimuruDev/Unity-MemoryProfiler-Snapshot-Archiver/blob/main/LICENSE).

README.md.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"name": "com.rimurudev.memory-snapshot-archiver",
3+
"version": "1.0.0",
4+
"displayName": "Memory Profiler Snapshot Archiver",
5+
"description": "Utility tool for archiving Memory Profiler snapshots to an external drive in Unity. Helps in freeing up disk space on the primary drive by moving snapshots to a specified location.",
6+
"unity": "2021.1",
7+
"unityRelease": "0f1",
8+
"documentationUrl": "https://github.com/RimuruDev/Unity-MemoryProfiler-Snapshot-Archiver",
9+
"licensesUrl": "https://github.com/RimuruDev/Unity-MemoryProfiler-Snapshot-Archiver/blob/main/LICENSE",
10+
"dependencies": {
11+
"com.unity.editorcoroutines": "1.0.0"
12+
},
13+
"keywords": [
14+
"memory",
15+
"profiler",
16+
"archiver",
17+
"memory-profiler",
18+
"unity",
19+
"unity-memory-profiler",
20+
"macos-memory-profiler",
21+
"unity-macos",
22+
"rimurudev",
23+
"rimuru-dev"
24+
],
25+
"author": {
26+
"name": "RimuruDev",
27+
"email": "[email protected]",
28+
"url": "https://github.com/RimuruDev"
29+
},
30+
"repository": {
31+
"type": "git",
32+
"url": "https://github.com/RimuruDev/Unity-MemoryProfiler-Snapshot-Archiver.git"
33+
}
34+
}

package.json.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)