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を見るとわかります。
自身でこれらのフォルダにファイルを配置する場合には、それがユーザ固有のデータで削除されても支障がないことを保証する必要があります。
保存・読み込み方法まとめ
次に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フォルダなので複数のプロジェクトで共有される設定値となる点に注意が必要です。
ScriptableSingleton
ScriptableSingletonを使うとPreferenceフォルダかProjectフォルダにファイルを保存できます。
FilePathAttribute.LocationをPreferenceFolderにするとPreferencesフォルダに、
FilePathAttribute.LocationをProjectFolderにするとプロジェクトフォルダに保存されます。
EditorUserSettings.SetConfigValue()
EditorUserSettings.SetConfigValueを使うとユーザ毎のエディタ設定を保存できます。
値はUserSettings/EditorUserSettings.asset
に保存されます。
このフォルダはバージョン管理対象外なのでユーザ固有の値となります。
まとめ
最後に保存方法と保存先を表でまとめておきます。
保存方法 | 保存先 |
---|---|
AssetDatabase | Assetsフォルダ |
FileIO | どこでも |
EditorPrefs | Preferenceフォルダ |
ScriptableSingleton(PreferenceFolder) | Preferenceフォルダ |
ScriptableSingleton(ProjectFolder) | Projectフォルダ |
EditorUserSettings.SetConfigValue() | UserSettingsフォルダ |