コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】MenuItem で Hierarchy の Create メニューを自作する時のお作法

概要

「GameObject」メニューにゲームオブジェクトを作成するメニューを追加する場合、
「GameObjectUtility.SetParentAndAlign」を必ず呼び出し、
親を設定し、子に同じレイヤーと位置を与えます。

また、「Undo.RegisterCreatedObjectUndo」を呼び出して作成を取り消し、
新しくオブジェクトを生成するときの Undo 操作を登録します。

さらに、「Selection.activeObject」に
新しく作成したオブジェクトを設定する必要があります。

「GameObject」メニューに自作のメニューを追加する場合、
他の GameObject 作成メニューとグループ化する必要があることに注意してください。
これは、優先度を「10」に設定することで実現できます。

優先度が設定されていないものは、
デフォルトの「1000」ではなく「10」が優先されることに注意してください。

using UnityEditor;
using UnityEngine;

public class Example
{
    [MenuItem( "GameObject/ピカチュウ", false, 10 )]
    private static void Create( MenuCommand menuCommand )
    {
        // ゲームオブジェクトを生成します
        var gameObject = new GameObject( "ピカチュウ" );
        
        // 親を設定して同じレイヤーを継承します
        GameObjectUtility.SetParentAndAlign( gameObject, menuCommand.context as GameObject );
        
        // Undo できるようにします
        Undo.RegisterCreatedObjectUndo( gameObject, "ピカチュウ" );
        
        // 生成したゲームオブジェクトを選択状態にします
        Selection.activeObject = gameObject;
    }
}

参考サイト様