【Unity】【エディタ拡張】Inspectorでコンポーネントを右クリックしたときのメニューを追加する

f:id:halya_11:20180718121159p:plain

Inspector上でコンポーネントを右クリックしたり、
歯車ボタンをクリックしたときに出てくるメニューを追加する方法です。

実装

MenuItemを使って実装します。

// CONTEXT/[コンポーネント名]/[メニュー名]とすることで追加できる
[MenuItem("CONTEXT/Transform/Sample")]
private static void SampleMenu(MenuCommand menuCommand)
{
    // MenuCommand.contextにコンポーネントのインスタンスが入ってくる
    var transform = menuCommand.context as Transform;
    transform.position = Vector3.one;
}

また、対象コンポーネントのMonoBehaviourに直接メソッドを書くこともできます。

using UnityEngine;

public class SampleBehaviour : MonoBehaviour {

    [ContextMenu("Sample")]
    private void Sample()
    {
        Debug.Log("Execute Sample");
    }
}

結果は次のようになります。

f:id:halya_11:20180718121159p:plain

フィールドを右クリックしたときのメニューを作る

ちなみに、フィールドを右クリックしたときのメニューも追加できます。

using UnityEngine;

public class SampleBehaviour : MonoBehaviour {

    // 引数は表示名, メソッド名
    [SerializeField, ContextMenuItem("Show Log", "Sample")]
    private int _sample;

    private void Sample()
    {
        Debug.Log(_sample);
    }
}

結果は次のようになります。

f:id:halya_11:20180718121233p:plain

参考

unity3d.com