コンテキストメニューとは?
インスペクターの各コンポーネントのヘッダー部分右端にある三点ボタンをクリックした時に表示されるメニューです。
こちらは、コンポーネントごとにメニューが表示されますが、スクリプトを書いて自由に追加することが出来ます。
コンポーネント用にメニューを追加する。
以下の様なスクリプトを用意し、GameObjectに追加してみます。
using UnityEngine;
public class ContextMenuTest : MonoBehaviour
{
[ContextMenu("NewContextMenu")]
private void NewFunction()
{
}
}
するとコンテキストメニューにNewContextMenuが追加されました。

メニュー名を/(スラッシュ)で区切ると階層化することも出来ます。
MenuItemでコンテキストメニューを追加する
MenuItem属性を使うと、UnityEditorのメニューに項目を追加することが出来ますが、
パスの先頭をCONTEXTとすることで、コンポーネントのコンテキストメニューに項目を追加することが出来ます。
CONTEXTを使用する場合は、
CONTEXT/コンポーネントの型/メニュー
のように指定します。
例えば以下の様な場合、コンポーネントにImageを指定してるので全てのImageコンポーネントにメニューが追加されます。
using UnityEditor;
public static class MenuTest
{
[MenuItem("CONTEXT/Image/ForImage")]
private static void ForImageMenu()
{
}
}

コンポーネントの型として、親クラスも指定することが出来るので、ComponentやObjectを指定した場合、
全てのコンポーネントにメニューが追加されることになります。
using UnityEditor;
public static class MenuTest
{
[MenuItem("CONTEXT/Object/ForObject")]
private static void ForObjectMenu()
{
}
}
フィールドにメニューを追加する
using UnityEngine;
public class ContextMenuTest : MonoBehaviour
{
[SerializeField, ContextMenuItem("Clear", "ClearText")] private string _text;
private void ClearText()
{
_text = string.Empty;
}
}
このようなスクリプトを書いた場合、インスペクタ上のTextというフィールド上で右クリックすると表示されるメニューに
Clearという項目を追加し、実行するとClearTextというメソッドが呼ばれるようになります。

メニューを追加してみて
コンポーネントにメニューを追加する手順について解析しました。
エディタ拡張の入門のような内容だったと思います。
こういったメニューを活用すれば、
SerializeFieldにいれるコンポーネントをコードからGetComponentで設定する- 子オブジェクトをまとめてリストに追加する
- 複数のフィールドをまとめて特定の値に変更する
といったインスペクタ上の操作も簡単に行えるようになります。