PreferenceItem
を使おうと思ったら obsolete になっていたため
推奨されている SettingsProvider
についてまとめる
/// <summary> /// <para>(Obsolete: use the SettingsProvider class instead) The PreferenceItem attribute allows you to add preferences sections to the Preferences window.</para> /// </summary> [Obsolete("[PreferenceItem] is deprecated. Use [SettingsProvider] instead.")] [AttributeUsage(AttributeTargets.Method)] public sealed class PreferenceItem : Attribute
SettingsProvider
Preference に加え Project Settings にも表示できるようになったクラスの模様
単純に表示させるだけなら 以下のコードでいけそう
表示させる場所は SettingsScope を変更することでいけます
両方ともに表示させたい場合は下記のようにどちらも定義しておけば両方に表示されます
public class ProjectSettingsProvider : SettingsProvider { private ProjectSettingsProvider(string path, SettingsScope scopes, IEnumerable<string> keywords = null) : base(path, scopes, keywords) { } public override void OnGUI(string searchContext) { EditorGUILayout.LabelField("test"); } /// <summary> /// Project Settings に表示させる /// </summary> /// <returns></returns> [SettingsProvider] public static SettingsProvider RegisterProject() { return new ProjectSettingsProvider("Tools/", SettingsScope.Project) { label = "Sample", }; } /// <summary> /// Preference に表示させる /// </summary> /// <returns></returns> [SettingsProvider] public static SettingsProvider RegisterUser() { return new ProjectSettingsProvider("Tools/", SettingsScope.User) { label = "Sample", }; }
各ウィンドウにある検索で見つかるようにしたい場合は、第3引数に文字列を渡してやれば検索に引っかかるようになります
return new ProjectSettingsProvider("Tools/", SettingsScope.User, new [] {"Sample"})
SettingsProvider を継承しなくても、guiHandler
等 描画の処理は登録できるので
メソッドを定義すればどこでも使えるが、ややこしくなるので個人的には継承して使いたいところ
[SettingsProvider] public static SettingsProvider RegisterUser() { return new ProjectSettingsProvider("Tools/", SettingsScope.User) { guiHandler = str => EditorGUILayout.LabelField("Test"), label = "Sample", }; }
Override Methods
override できるメソッド一覧
/// <summary> /// 設定画面が表示されたタイミング /// </summary> public override void OnActivate(string searchContext, VisualElement rootElement) { base.OnActivate(searchContext, rootElement); } /// <summary> /// 設定画面が非表示になったタイミング /// </summary> public override void OnDeactivate() { base.OnDeactivate(); } /// <summary> /// 検索窓に文字が入力されたタイミング /// </summary> public override bool HasSearchInterest(string searchContext) { return base.HasSearchInterest(searchContext); } /// <summary> /// 設定画面 /// </summary> public override void OnGUI(string searchContext) { base.OnGUI(searchContext); } /// <summary> /// タイトルのGUI /// </summary> public override void OnTitleBarGUI() { base.OnTitleBarGUI(); } /// <summary> /// フッターのGUI /// </summary> public override void OnFooterBarGUI() { base.OnFooterBarGUI(); } /// <summary> /// 10フレーム毎に呼び出される /// </summary> public override void OnInspectorUpdate() { base.OnInspectorUpdate(); }