スクリプトから以下のような画像の状態にする方法解説します。
ソースコード
using System.Linq;
using System.Reflection;
using UnityEditor;
using UnityEngine;
namespace Norakyo.Internal
{
internal static class Sample
{
[MenuItem("Edit/RenameSample")]
private static void Rename()
{
var shwType = typeof(UnityEditor.Editor)
.Assembly.GetTypes().First(x => x.FullName == "UnityEditor.SceneHierarchyWindow");
shwType.InvokeMember("FrameAndRenameNewGameObject"
, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod
, null, null, new object[] { });
}
}
}
解説
1行目
var shwType = typeof(UnityEditor.Editor)
.Assembly.GetType("UnityEditor.SceneHierarchyWindow");
UnityEditor.SceneHierarchyWindowクラスのTypeを取得しています。
typeof(UnityEditor.Editor).Assembly の部分でアセンブリを取得しています。
たんに Type.GetType(“UnityEditor.SceneHierarchyWindow”); と書くだけでは取得できないので注意。
2行目
shwType.InvokeMember("FrameAndRenameNewGameObject"
, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod
, null, null, new object[] { });
オブジェクトをリネーム可能な状態にする関数は「FrameAndRenameNewGameObject」という関数なのですが、アクセス修飾子がinternalなので、InvokeMember関数を利用して呼び出します。
おわりに
スクリプトからオブジェクトを生成した時に、同時に名前も変えたいときなどに使えると思います。
以下の記事が利用例です
ちなみに、リネームのショートカットは”F2“です。覚えておくと便利でしょう。
参考
https://github.com/Unity-Technologies/UnityCsReference/blob/e740821767d2290238ea7954457333f06e952bad/Editor/Mono/SceneHierarchyWindow.cs
コメント