0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unityに自動セーブ機能を追加する

Last updated at Posted at 2024-08-15

目的

tsubakiさんが作られた UnityEditor におけるシーンのオートセーブ機能(https://gist.github.com/tsubaki/8709502) を紹介した記事が多いが、最新バージョン(2022.3.40f.1)だとエラーが出たので、同じエラーが出た場合の対処方法を紹介します。

環境

  • Unity(2022.3.40f.1)

とりあえず今までやり方でやってみる

こちらのサイトを参考にそのまま導入する

1.tsubakiさん(https://gist.github.com/tsubaki/8709502) のGithubにとび、右上の「Download ZIP」でダウロード&解凍

スクリーンショット 2024-08-15 123211.png

2.解凍すると「AutoSave.cs」と「SceneBackup.cs」が出てくるのでUnityのEditorに「AutoSave.cs」をインポート

スクリーンショット 2024-08-15 123809.png

しかし、ここでエラー発生がしてしまう。エラー内容は

Assets\AutoSave.cs(24,6): error CS0619: 'EditorApplication.SaveAssets()' is obsolete: 'Use AssetDatabase.SaveAssets instead (UnityUpgradable) -> AssetDatabase.SaveAssets()'
Assets\AutoSave.cs(44,7): error CS0619: 'EditorApplication.SaveAssets()' is obsolete: 'Use AssetDatabase.SaveAssets instead (UnityUpgradable) -> AssetDatabase.SaveAssets()'

とのことで、どうやらEditorApplication.SaveAssets()の書き方は現在だと使えないみたい。AssetDatabase.SaveAssets()のほうを使ってねとのこと。

修正してみる

public class AutoSave
{
	public static readonly string manualSaveKey = "autosave@manualSave";

	static double nextTime = 0;
	static bool isChangedHierarchy = false;

	static AutoSave ()
	{
		IsManualSave = true;
		EditorApplication.playmodeStateChanged += () =>
		{
			if ( IsAutoSave && !EditorApplication.isPlaying && EditorApplication.isPlayingOrWillChangePlaymode) {

				IsManualSave = false;

				if (IsSavePrefab)
					AssetDatabase.SaveAssets()//<-EditorApplication.SaveAssets ();
				if (IsSaveScene) {
					Debug.Log ("save scene " + System.DateTime.Now);
					EditorApplication.SaveScene ();
				}
				IsManualSave = true;
			}
			isChangedHierarchy = false;
		};

		nextTime = EditorApplication.timeSinceStartup + Interval;
		EditorApplication.update += () =>
		{
			if (isChangedHierarchy && nextTime < EditorApplication.timeSinceStartup) {
				nextTime = EditorApplication.timeSinceStartup + Interval;

				IsManualSave = false;

				if (IsSaveSceneTimer && IsAutoSave && !EditorApplication.isPlaying) {
					if (IsSavePrefab)
						EditorApplication.SaveAssets ();
					if (IsSaveScene) {
						Debug.Log ("save scene " + System.DateTime.Now);
						AssetDatabase.SaveAssets()//<-EditorApplication.SaveScene ();
					}
				}
				isChangedHierarchy = false;
				IsManualSave = true;
			}
		};

これでエラーが解消されるはず。

AutoSaveの設定

「編集」->「環境設定」->「自動保存」にとび、「auto save」から始まる4つすべてにチェックを入れる。

スクリーンショット 2024-08-15 144057.png

Auto Saveの設定は完了です。これでUnityが落ちて今までの作業がパー👐になる事故が防げるので、プロジェクト作ったら皆さん絶対に入れましょう。

AutoSaveはプロジェクトを新規作成するごとに毎回入れる必要があります。
面倒くさいですが、新規プロジェクトを作成した際は、AutoSaveの導入を忘れないようにしましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?