本日は Unity の小ネタ枠です。
Unityでスクリプトからコンポーネントにメニュー項目を実行する方法です。
MenuItem
Unityで自作のメニュー項目を追加するにはMenuItemを属性として指定します。
MenuItemは静的関数(static)のみが利用可能です。
docs.unity3d.com
コンポーネントにメニューを追加する
以下のパスはコンポーネント用の特別なパスとして利用されます。
・CONTEXT/
例えば、BoxColliderコンポーネントにメニューを追加したい場合は以下のパスを指定してMenuItem属性を利用します。
[MenuItem("CONTEXT/BoxCollider/(メニュー名)")]
また引数にMenuCommand型を受け取ることで実行したコンポーネントの参照を受け取ることも可能です。
docs.unity3d.com
[MenuItem("CONTEXT/BoxCollider/ShowLog")] private static void BoxColliderShowLogTest(MenuCommand command) { BoxCollider instance = (BoxCollider)command.context; // 処理 }
サンプルスクリプト
BoxColliderにメニューを追加するサンプルスクリプトを作成しました。
・ComponentMenuItemTest.cs
using UnityEditor; using UnityEngine; public class ComponentMenuItemTest : MonoBehaviour { /// <summary> /// BoxColliderのメニューに表示されるアイテムを追加する /// </summary> [MenuItem("CONTEXT/BoxCollider/ShowLog")] private static void BoxColliderShowLogTest(MenuCommand command) { BoxCollider instance = (BoxCollider)command.context; Debug.Log($"{instance.name}に設定された{instance.GetType()}のメニューを実行した"); } }
以下のようにBoxColliderの[:]アイコンをクリックしてメニューを実行するとログが表示されました。