Unity のバックアップを全自動で保存する
Unity のアセットを作成しました。
皆さんの役に立てればと思い
公開してみたいと思います。
本体はこちら(Unity Asset Store)
本体はこちら(BOOTH)
本体はこちら(Google Drive)
このアセットの説明
ファイルが更新されるたびに自動的にバックアップを保存します。
このアセットをインポートする以外の操作は必要ありません。
Assets フォルダがある階層に Assets_BackUP フォルダが自動的に生成されます。
Assets フォルダ内のファイルが更新されるたびに、そこにバックアップが自動的に保存されます。
バックアップファイル名には更新日が含まれるため、特定の時点に戻したい場合はファイル名で判別できます。
Assets_BackUP フォルダを削除すると、現在の状態のバックアップのみを含む新しい Assets_BackUP フォルダが再生成されます。
Assets_BackUP フォルダのサイズが大きくなりすぎた場合は、削除することを検討してください。
このアセットが Assets フォルダ内の
ファイルを書き換える事は絶対にありません。
このアセットは Assets_BackUP フォルダのみを触ります。
なのでこのアセットがバグを引き起こす事はありえません。
安心してご利用下さい。
このアセットのコード
ver0.0.0 は以下のコードで動作しています。
ver1.0.0 では 4 作業日以上前のバックアップファイルを
ある程度削除する機能が盛り込まれていますが
コードが長いため ver0.0.0 のコードを載せます。
SephirothAutoBackUPMonitoring.cs を新規作成して
コードを下記のコードに差し替えて
Editor フォルダに入れても
ver0.0.0 の状態で動作すると思います。
using System.Threading.Tasks;
namespace SephirothTools
{
public class SephirothAutoBackUPMonitoring
{
private static readonly object Lock = new();
private static bool isExec = false;
private static string DateString;
public const bool isCSharpFileOnly = false;
[UnityEditor.InitializeOnLoadMethod]
private static void Exec()
{
lock (Lock)
{
if (isExec)
{
return;
}
isExec = true;
Task.Run(() => TaskExec(System.DateTime.Now.ToString("yyyyMMdd-HHmmss")));
}
}
private static void TaskExec(string date)
{
DateString = date;
while (true)
{
try
{
ExecOneTime();
}
catch
{
}
System.Threading.Thread.Sleep(5000); // A thread for SephirothAutoBackUPMonitoring is generated and put into sleep, so the main thread is not stopped.
if(date != DateString)
{
break;
}
}
}
private static void ExecOneTime()
{
string targetPath = System.IO.Directory.GetCurrentDirectory() + "\\Assets_BackUP";
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
foreach (string onePath in System.IO.Directory.GetFiles(System.IO.Directory.GetCurrentDirectory() + "\\Assets", "*", System.IO.SearchOption.AllDirectories))
{
try
{
if (isCSharpFileOnly && !onePath.EndsWith(".cs"))
{
continue;
}
string oneTargetDirectory = System.IO.Directory.GetCurrentDirectory() + "\\Assets_BackUP" + onePath.Substring((System.IO.Directory.GetCurrentDirectory() + "\\Assets").Length);
oneTargetDirectory = oneTargetDirectory.Substring(0, oneTargetDirectory.LastIndexOf("\\"));
string oneTargetFileName = System.IO.File.GetLastWriteTime(onePath).ToString("yyyyMMdd-HHmmss") + "_" + System.IO.Path.GetFileName(onePath);
string target = oneTargetDirectory + "\\" + oneTargetFileName;
if (!System.IO.File.Exists(target))
{
string[] pathMove = oneTargetDirectory.Split("\\");
string folderPath = pathMove[0];
for (int i = 1; i < pathMove.Length; i++)
{
folderPath = folderPath + "\\" + pathMove[i];
if (!System.IO.Directory.Exists(folderPath))
{
System.IO.Directory.CreateDirectory(folderPath);
}
}
System.IO.File.Copy(onePath, target);
}
}
catch
{
}
}
}
}
}
以上 Unity のバックアップを
全自動で保存するアセットを公開しました。
Git による管理の場合
コミットを長期間忘れる傾向にある人は
是非こちらを併用する事を検討してみてはいかがでしょうか?
その場合は Assets_BackUP フォルダを Git の対象外にして下さい。
皆さんの開発の助けになれますように
閲覧ありがとうございました。