MRが楽しい

MRやVRについて学習したことを書き残す

UnityでPresetを使ってInspectorビューの設定を保存/適用する その4(Presetの作成を無効にする)

本日はUnityの小ネタ枠です。
UnityでPresetを使ってInspectorビューの設定を保存/適用する方法です。
今回はPresetの作成を無効にする設定についてです。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

ExcludeFromPreset

ExcludeFromPreset属性をクラスに設定するとクラスのPresetが作成できなくなります。
docs.unity3d.com

サンプルスクリプト

ExcludeFromPreset属性を設定していないクラスと設定したクラスの以下のサンプルスクリプトを作成しました。
・ExcludeFromPreset属性を設定していないクラス

using UnityEditor;
using UnityEditor.Presets;
using UnityEngine;

public class PresetTest : MonoBehaviour
{
    [SerializeField]
    private int presetInt = 0;
    
    [SerializeField]
    private string presetString = "preset";
    
    [SerializeField]
    private bool presetBool = false;
    
    [ContextMenu("Create Preset")]
    public void CreatePresetAsset()
    {
        Preset preset = new Preset(this);
        AssetDatabase.CreateAsset(preset, "Assets/Sandbox/PresetTest/Exports/CreatedPresetTest.preset");
    }
}

・ExcludeFromPreset属性を設定したクラス

using UnityEditor;
using UnityEditor.Presets;
using UnityEngine;

[ExcludeFromPreset]
public class ExcludePresetTest : MonoBehaviour
{
    [SerializeField]
    private int presetInt = 0;
    
    [SerializeField]
    private string presetString = "preset";
    
    [SerializeField]
    private bool presetBool = false;
    
    [ContextMenu("Create Preset")]
    public void CreatePresetAsset()
    {
        Preset preset = new Preset(this);
        AssetDatabase.CreateAsset(preset, "Assets/Sandbox/PresetTest/Exports/CreatedExcludePresetTest.preset");
    }
}

ゲームオブジェクトにサンプルスクリプトをアタッチしてみます。
ExcludeFromPreset属性を設定したコンポーネントには右上のプリセットアイコンが表示されません。

またコードからのPreset作成の動作も変化します。
ExcludeFromPreset属性を設定していないクラスでCreateAssetを実行するとPresetが出力されます。

ExcludeFromPreset属性を設定したクラスでCreateAssetを実行するとPresetファイルは出力されますが、Unsupportのエラーが表示されて利用できません。