【Unity】【エディタ拡張】違う値を持つプロパティのInspectorを複数選択表示した際の挙動を実装する

Unityのエディタ拡張で、違う値を持つプロパティのInspectorを複数選択表示した際の挙動を実装する方法です。

Unity2019.1.0

やりたいこと

Unityで複数のアセットを一度に選択すると、同じプロパティは同時に編集することができます。
このときこれらのプロパティが違う値を持っていると、「-」という表示になります。

この記事ではこれをエディタ拡張で実装する方法を紹介します。

EditorGUI.showMixedValue

この表示を行う方法は簡単で、EditorGUI.showMixedValueをtrueにするだけです。
ソースコードは以下のようになります。

EditorGUI.showMixedValue = true;
EditorGUILayout.Toggle("Example", false);
EditorGUI.showMixedValue = false;

実際には複数のプロパティが違う値を持っている時のみこの「-」表示にする必要があります。
これは以下のように、SerializedProperty.hasMultipleDifferentValuesMaterialProperty.hasMixedValueを使って実装します。

// SerializedPropertyの場合
SerializedProperty serializedProperty;
EditorGUI.showMixedValue = serializedProperty.hasMultipleDifferentValues;

// MaterialPropertyの場合
MaterialProperty materialProperty;
EditorGUI.showMixedValue = materialProperty.hasMixedValue;

結果

実際にこれをプロパティに適用した結果は以下の通りとなります。