独自のSettingを追加したい場合のやり方を調べてみました。
サンプルコード
次のコードはProjectSettingに項目を追加する最小限のコードになります。
SettingProviderを継承したクラスを作成し、コンストラク タなどを追加します。
public class AnotherSettingProvider : SettingsProvider
{
public AnotherSettingProvider (string path, SettingsScope scopes, IEnumerable<string> keywords = null) : base (path,
scopes, keywords)
{
}
[SettingsProvider]
public static SettingsProvider CreateAnotherSettingsProvider ()
{
var provider = new AnotherSettingProvider ("Preferences/Another Setting" , SettingsScope.User);
return provider;
}
}
項目を追加する
SettingsScope
SettingsScopeはSettingsWindowかPreferencesWindowに項目するかどうかで設定が変わります。
SettingsScope.Userにして、今回はPreferencesWindowに項目を追加しています。
項目の中身を書く
OnGUIに項目の中身を記載します。
public override void OnGUI (string searchContext)
{
EditorGUILayout.LabelField ("This is another setting provider" );
}
テキスト表示
保存する用のScriptableObjectを用意する
settingの内容を保存するScriptableObjectを用意します。
public class NewProjectSetting : ScriptableObject
{
public bool hoge = false ;
}
こちらのScritableObjectを表示するようAnotherSettingProviderを調整します。
private static NewProjectSetting _settings;
private SerializedObject _setting;
private const string path = "Assets/AnotherSetting.asset" ;
public override void OnActivate (string searchContext, VisualElement rootElement)
{
_settings = AssetDatabase.LoadAssetAtPath<NewProjectSetting>(path);
if (_settings == null)
{
var setting = ScriptableObject.CreateInstance<NewProjectSetting>();
AssetDatabase.CreateAsset (setting, path);
}
_setting = new SerializedObject (_settings);
}
public override void OnGUI (string searchContext)
{
if (_settings == null) return ;
_setting.Update ();
EditorGUILayout.PropertyField (_setting.FindProperty ("hoge" ));
_setting.ApplyModifiedProperties ();
}
次のように表示されます。
項目追加
このScripatbleObjectを使って必要な処理を実装できます。
OnActivate
OnActivateメソッドは設定プロバイダがアクティブになる時(つまりユーザが設定ウィンドウを開いた時)に呼び出されます。
そのため、設定ウィンドウが開かれた際に必要なセットアップ、例えば設定のロードやUIの更新などのコードは、OnActivateメソッド内に配置するのが一般的です。
最後に
後は、設定した項目を必要な箇所で利用します。