コガネブログ

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

【Unity】エディタ拡張からゲームオブジェクトの名前変更モードにするスクリプト

ソースコード

using System.Reflection;
using UnityEditor;

public static class SceneHierarchyInternal
{
    public static void RenameGO()
    {
        var assembly                 = typeof( EditorWindow ).Assembly;
        var sceneHierarchyWindowType = assembly.GetType( "UnityEditor.SceneHierarchyWindow" );
        var sceneHierarchyType       = assembly.GetType( "UnityEditor.SceneHierarchy" );
        var sceneHierarchyField      = sceneHierarchyWindowType.GetField( "m_SceneHierarchy", BindingFlags.Instance | BindingFlags.NonPublic );
        var renameGO                 = sceneHierarchyType.GetMethod( "RenameGO", BindingFlags.Instance | BindingFlags.NonPublic );
        var sceneHierarchyWindow     = EditorWindow.GetWindow( sceneHierarchyWindowType );
        var sceneHierarchy           = sceneHierarchyField.GetValue( sceneHierarchyWindow );

        renameGO.Invoke( sceneHierarchy, null );
    }
}

使い方

SceneHierarchyInternal.RenameGO();

// ゲームオブジェクト作成直後に名前変更モードにしたい場合は
// 2回処理を遅らせる必要がある?
EditorApplication.delayCall += () => EditorApplication.delayCall += () => SceneHierarchyInternal.RenameGO();

参考サイト様