【Unity】エディタでデータを保存する場所と保存方法まとめ

Unityのエディタでデータを保存する場所と保存方法についてまとめました。

Unity2020.1

保存する場所の分類

Unityエディタにおいてデータを保存する場所は、その用途に応じて以下の4種類に分類できます。

Assetsフォルダ

まずは言わずと知れたAssetsフォルダです。
ランタイムで使うアセットはここに配置する必要があります。

Preferenceフォルダ

次にPreferenceフォルダです。
これはUnityエディタのPreferencesのような設定値を保存するためのフォルダです。

ここに保存された値はUnityエディタとしての設定値とみなされるため、異なるプロジェクトでも値が共有されます。

フォルダの場所はUnityEditorInternal.InternalEditorUtility.unityPreferencesFolderで取得できます。
手元の環境(Windows)では以下にありました。

C:/Users/UserName/AppData/Roaming/Unity/Editor-5.x/Preferences
Projectフォルダ

ProjectフォルダはAssetsフォルダの親フォルダで、Unityのプロジェクト全体を管理するフォルダです。
Projectフォルダ配下のAssetsフォルダ以外のフォルダに配置したファイルは、
Unityエディタからは見えないもののUnityプロジェクトの一部として管理されるファイルとなります。

ランタイムでは使わないもののそのプロジェクトに必要なファイルを配置します。
具体的にはProject Settingsなどがこれにあたります。

Libraryなど共有しないフォルダ

Unityプロジェクト直下のフォルダのうち、LibraryやTempといった特定の名前のフォルダはバージョン管理ツールで管理しません。
つまりプロジェクト固有のデータではなくユーザ固有のデータとなります。

具体的にはAssetDatabaseのキャッシュ情報やAddressablesのビルドに使った情報などが保存されます。

対象のフォルダについては以下のgitignoreを見るとわかります。

github.com

自身でこれらのフォルダにファイルを配置する場合には、それがユーザ固有のデータで削除されても支障がないことを保証する必要があります。

保存・読み込み方法まとめ

次にUnityエディタでデータを保存する方法についてまとめます。

AssetDatabase

AssetDatabaseを使うとAssetsフォルダ内にアセットを保存・読み込みできます。

// 作成
AssetDatabase.CreateAsset(instance, assetPath);
// 読み込み
AssetDatabase.LoadAssetAtPath<GameObject>(assetPath);
FileIO

C#のFile系のクラスを使って保存することもできます。
主にAssetsフォルダ以外に保存したいときに使用します。

// 作成
File.WriteAllBytes(path, bytes);
// 読み込み
File.ReadAllBytes(path);
EditorPrefs

EditorPrefsを使うとPreferencesフォルダに値を保存できます。

// 設定
EditorPrefs.SetBool("ExampleKey", true);
// 取得
EditorPrefs.GetBool("ExampleKey");

Preferencesフォルダなので複数のプロジェクトで共有される設定値となる点に注意が必要です。

SettingsProvider

SettingsProviderを使うとProjectSettingsやPreferencesに値を保存できます。

light11.hatenadiary.com

上の記事で説明していますが、SettingsScopeをUserにするとPreferencesフォルダに値が格納されます。
またSettingsScopeをProjectにするとProjectSettingsフォルダに値が格納されます。

ScriptableSingleton

ScriptableSingletonを使うとPreferenceフォルダかProjectフォルダにファイルを保存できます。

light11.hatenadiary.com

FilePathAttribute.LocationをPreferenceFolderにするとPreferencesフォルダに、
FilePathAttribute.LocationをProjectFolderにするとプロジェクトフォルダに保存されます。

EditorUserSettings.SetConfigValue()

EditorUserSettings.SetConfigValueを使うとユーザ毎のエディタ設定を保存できます。

light11.hatenadiary.com

値はUserSettings/EditorUserSettings.assetに保存されます。
このフォルダはバージョン管理対象外なのでユーザ固有の値となります。

まとめ

最後に保存方法と保存先を表でまとめておきます。

保存方法 保存先
AssetDatabase Assetsフォルダ
FileIO どこでも
EditorPrefs Preferenceフォルダ
SettingsProvider(SettingsScope = User) Preferenceフォルダ
SettingsProvider(SettingsScope = Project) Projectフォルダ
ScriptableSingleton(PreferenceFolder) Preferenceフォルダ
ScriptableSingleton(ProjectFolder) Projectフォルダ
EditorUserSettings.SetConfigValue() UserSettingsフォルダ

関連

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com