Unity Editor - 验证GameObjects

时间:2016-06-12 13:04:51

标签: unity3d unity5

任务:

我想创建一个上下文菜单项,该项可以在GameObject中选择的Hierarchy上运行。仅当选定GameObjectPrefab时,此操作才可用。我正在开发 Unity 5.3.2

enter image description here

代码:

文件MenuItems.cs位于 Assets \ Editor

using UnityEditor;
using UnityEngine;

public static class MenuItems
{

    [MenuItem("GameObject/Action on prefab", false, 14)]
    private static void MenuActionPrefab()
    {
    }

    [MenuItem("GameObject/Action on prefab", true, 14)]
    private static bool ValidateMenuActionPrefab()
    {
        var isPrefab = PrefabUtility.GetPrefabParent(Selection.activeGameObject) != null;
        return isPrefab;
    }
}

问题:

问题是菜单项是可见的(并且可以点击),无论选择GameObject是否为Prefab。我在调试器中测试了代码,从ValidateMenuActionPrefab()返回的值是正常的(true当我在Prefab上运行时,false在非预制游戏对象上)。

我读过Unity 5验证方法有问题,但Assets中有关[MenuItem("GameObject/Action on prefab")] 验证的示例完全正常。

问题:

那么,如果这是一个合适的解决方案?还是有另一种方法可以实现同样的目标吗?

其他信息:

我尝试使用以下方法简单地运行这些方法:

[MenuItem("GameObject/Action on prefab", true)]

Action on prefab

但在这种情况下,上下文菜单中没有Select Prefab。当我尝试不设置优先级索引时,此项目也不可见。

修改

行为应与<script src="https://maps.googleapis.com/maps/api/js" type="text/javascript"></script> 项相似(在屏幕截图中可见)。当对象未连接到预制字段时,应该是灰色且不可点击的。当对象是预制字段时,它是黑色的,可以单击。

1 个答案:

答案 0 :(得分:1)

我刚刚设置了一个新的unity3d项目,你的代码就可以了,然后点击菜单Gameobject / Action on Asset。

我使用的是Unity3d 5.3.4f1。也许它是你特定版本中的一个错误,但是我在5.3.3和5.3.4更改日志中都没有找到任何提及

但是,当右键单击并在层次结构中的对象上打开上下文菜单时,ValidationMethod 不会被调用,因此始终启用上下文菜单元素。 如果您实际单击上下文菜单项,则验证方法 被调用;如果它返回false,则不执行任何操作。

看起来像一个错误,但至少使用它是安全的。

选择了预制件

enter image description here

选择了实例

enter image description here