最后整理一下这次对于Editor的一些笔记~
缩进
EditorGUI.indentLevel++;
EditorGUI.indentLevel--;
(不过Button是GUILayout,可能不归EditorGUI管所以不会一起缩进...
Undo
Undo.RecordObject(renderer, "Light Layer Batched Modification");
renderer.renderingLayerMask = (uint) LL_Flags;
PrefabUtility.RecordPrefabInstancePropertyModifications(renderer);
来自mentor的代码~记录脚本的更改并允许用户回退修改。
右键选单
[MenuItem]创建时可以设定priority属性,其中GameObject目录下小于50的项目也会出现在hierarchy的右键菜单中: 更多菜单排序可以参考:Guide to Extending Unity Editor’s Menus
禁用Menu Item
前面对右键选单的操作有一个小问题,我们写的插件方法一般是对特定物体使用的,但其目录会同步到Create菜单,可能会让其他人产生误解。我们可以通过设置MenuItem的Validate状态来解决这个问题:
//未选取可操作物体时,禁用菜单功能
[MenuItem("GameObject/GI-UseLightMaps",true, priority = 30)]
[MenuItem("GameObject/GI-UseLightProbes",true, priority = 30)]
[MenuItem("GameObject/GI-Off", true,priority = 30)]
static bool GImenuValiadate()
{
foreach (var obj in Selection.transforms)
{
if (obj.GetComponent<MeshRenderer>()) return true;
}
return false;
}
TreeView
还没看完,下次再说。