はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】Editor.DrawPropertiesExcludingを用いてUnityが提供するコンポーネント含めインスペクターに表示されているプロパティを非表示にする

はじめに

例えばUnityが提供しているImageコンポーネントですが、Colorというプロパティだけ非表示にしたいみたいなモチベーションがあったとします。

Imageコンポーネント

ただInspector拡張をする際にbase.OnInspectorGUI()をしてしまうと、Colorが表示されてしまいます。

[CustomEditor(typeof(Image))]
public class SampleEditor : Editor
{
    public override void OnInspectorGUI()
    {
        // Imageコンポーネントの既存のインスペクタを表示
        base.OnInspectorGUI();
    }
}
base.OnInspectorGUIを実行した場合

どうすれば実現できるのかというと、ドキュメントにちらっとだけ触れられているinternalなメソッドを利用すると実現できます。今回はその利用方法について紹介したいと思います。
Editor-OnInspectorGUI - Unity スクリプトリファレンス

概要

UnityEditor.Editor.DrawPropertiesExcludingを利用すると、特定のプロパティだけ非表示にすることができます。protected internalなので、ドキュメントにはAPI一覧にないので注意です。

github.com

protected internal static void DrawPropertiesExcluding(SerializedObject obj, params string[] propertyToExclude)

公式でもAnimationEditorなんかで使われていたりします。
github.com

使い方

実際にImageコンポーネントのImageプロパティを非表示にしてみましょう。

[CustomEditor(typeof(Image))]
public class ImageInspectorEditor : Editor
{
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        DrawPropertiesExcluding(serializedObject, "m_Color");
        serializedObject.ApplyModifiedProperties();
    }
}
Colorが非表示になっている様子