はじめに
今回はSettingsProvider
を用いて、Project Settings
やPreferences
に独自の項目を追加してみようという記事になります。
一応注意点としてはSettingsProvider
はUnity2018.3
から対応しているので、それ未満では利用できないです。
概要
SettingsProvider
はProject Settings
やPreference
がどのように表示されるかを指定するクラスになります。
SettingsProvider is the configuration class that specifies how a Project setting or a preference should appear in the Settings or Preferences window.
Unity - Scripting API: SettingsProvider
また描画するコードはIMGUI
とUI Toolkit(UIElements)
のどちらも対応しているようですね。
項目を追加する
Project Settings
[SettingsProvider] public static SettingsProvider CreateCustomSettingsProvider() { // Project Settingsのどの場所に項目を追加するか var path = "Project/CustomSetting/Sample"; // SettingsScope.Projectを指定することでProject Settingsに項目を追加できる var provider = new SettingsProvider(path, SettingsScope.Project) { // 項目のタイトル label = "Sample", // どのように描画するか(IMGUI) guiHandler = searchContext => { EditorGUILayout.LabelField("これはSettingsProviderにより追加した独自項目です。"); }, // 検索するときのキーワード keywords = new HashSet<string>(new[]{ "CustomSetting" }), }; return provider; }
ちなみにpath
をProject/〇〇
以外にすると、表示が以下のように分かれるようになります。
Preference
Preference
に独自項目を追加したい場合はSettingsProvider
のコンストラクタでSettingsScope.User
を指定してあげればできます。
[SettingsProvider] public static SettingsProvider CreateCustomSettingsProvider() { // Preferencesのどの場所に項目を追加するか var path = "Preferences/CustomSetting/Sample"; // SettingsScope.Projectを指定することでProject Settingsに項目を追加できる var provider = new SettingsProvider(path, SettingsScope.User) { // 項目のタイトル label = "Sample", // どのように描画するか(IMGUI) guiHandler = searchContext => { EditorGUILayout.LabelField("これはSettingsProviderにより追加した独自項目です。"); }, // 検索するときのキーワード keywords = new HashSet<string>(new[]{ "CustomSetting" }), }; return provider; }
描画フレームワーク
IMGUI
IMGUI
を利用する場合は、今まで紹介してきた通りguiHandler
を利用します。
var provider = new SettingsProvider(path, SettingsScope.Project) { // 項目のタイトル label = "Sample", // どのように描画するか(IMGUI) guiHandler = searchContext => { EditorGUILayout.LabelField("これはSettingsProviderにより追加した独自項目です。"); }, // 検索するときのキーワード keywords = new HashSet<string>(new[]{ "CustomSetting" }), };
UI Toolkit(UIElements)
UI Toolkit(UI Elements)
を利用する場合はactivateHandler
を利用します。
var provider = new SettingsProvider(path, SettingsScope.Project) { // 項目のタイトル label = "Sample", // どのように描画するか(UI Elements) activateHandler = (searchContext, rootElement) => { // UXMLを取得 var uxml = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/SettingsUI.uxml").CloneTree(); // USSを取得 var styleSheet = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Editor/SettingsUI.uss"); uxml.styleSheets.Add(styleSheet); rootElement.Add(uxml); }, // 検索するときのキーワード keywords = new HashSet<string>(new[]{ "CustomSetting" }), };
// SettingsUI.uxml <UXML xmlns="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements"> <!-- ラベルを一つ追加 --> <Label text="これはSettingsProviderにより追加した独自項目です。" /> </UXML>
// SettingsUI.uss Label { font-size: 20px; -unity-font-style: bold; color: rgba(255, 0, 0, 1) }
補足
SettingsProvider
を継承して実装する方法もありますので、そちらも知りたい方は公式ドキュメントを参照してみてください。
Unity - Scripting API: SettingsProvider
またSettingsProvider
のプロパティもlabel
・guiHandler
・activateHandler
・keywords
以外にも複数ありますので、よりカスタマイズしたい方はそちらも参照してみてください。