【Unity】【エディタ拡張】PreferencesやProject Settingsに独自の項目を追加する(Unity2018.3以降)

Unity2018.3以降でPreferencesやProject Settingsに独自の項目を追加する方法です。

Unity2019.2.6

PreferenceItemがObsoleteになっていた

Unity2018.2以前では、Preferencesに独自の項目を追加する際にはPreferenceItemを使っていました。
が、いつの間にかObsoleteになっていました。マニュアルを見る限り2018.3からのようです。

docs.unity3d.com

代わりにSettingsProviderを使うように案内されているのでこれを使用してみます。

docs.unity3d.com

Settings Providerを使ってPreferencesに項目を追加する

ほぼマニュアルのサンプル通りになりますが、SettingsProviderを使ってPreferencesに項目を追加するには以下のようにします。

using System.Collections.Generic; 
using UnityEditor;

static class ExampleSettingsResiter
{
    [SettingsProvider]
    public static SettingsProvider CreateExampleProvider()
    {
        var provider = new SettingsProvider("ExampleGroup/", SettingsScope.User)
        {
            // タイトル
            label = "Example",
            // GUI描画
            guiHandler = searchContext => EditorGUILayout.Toggle("Example", true),
            // 検索時のキーワード
            keywords = new HashSet<string>(new[] { "Example" })
        };

        return provider;
    }
}

SettingsProviderのコンストラクタの第一引数で、項目をグループ化できるようになりました。
結果は以下のようになります。

f:id:halya_11:20191017003327p:plain

Project Settingsに項目を追加する

次にProject Settingsに項目を追加してみます。
といっても、SettingsProviderのコンストラクタの第二引数を変えるだけです。お手軽。

using System.Collections.Generic; 
using UnityEditor;

static class ExampleSettingsResiter
{
    [SettingsProvider]
    public static SettingsProvider CreateExampleProvider()
    {
        // 第二引数をSettingsScope.Projectに変更した
        var provider = new SettingsProvider("ExampleGroup/", SettingsScope.Project)
        {
            label = "Example",
            guiHandler = searchContext => EditorGUILayout.Toggle("Example", true),
            keywords = new HashSet<string>(new[] { "Example" })
        };

        return provider;
    }
}

結果は以下のようになります。

f:id:halya_11:20191017003459p:plain

参考

docs.unity3d.com