2016-06-12 16 views
0

任務:統一編輯器 - 確認GameObjects

我希望創建一個將在GameObjectHierarchy選擇工作上下文菜單項。只有在選擇GameObjectPrefab時,此操作纔可用。我正在統一5.3.2

enter image description here

代碼:

文件MenuItems.cs位於資產\編輯

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; 
    } 
} 

問題:

問題是菜單項是可見的(並且可以被點擊),無論是否選擇GameObjectPrefab或不是。我在調試器中測試了代碼,從ValidateMenuActionPrefab()返回的值是OK(true,當我在Prefab上運行它時,false在非預製gameobject上)。

我已經閱讀過Unity 5在驗證方法方面存在問題,但UNITY EDITOR EXTENSIONS – MENU ITEMS關於在Assets中驗證的示例工作完全正常。

問:

因此,如果這是一個妥善的解決辦法?還是有另一種方法來實現相同的目標?

附加信息:

我曾嘗試使用運行這些方法的簡單方法:

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

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

但在這種情況下,在上下文菜單中沒有Action on prefab 。當我嘗試不設置優先級索引時,這個項目也不可見。

編輯:

行爲應該是呈三角Select Prefab項目(截圖上可見)。當對象沒有連接到預製場時,應該是灰色且不可點擊的。當對象是預製場時是黑色的並且可以被點擊。

回答

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

+0

還沒有,但正如我所說的,代碼'isPrefab = PrefabUtility.GetPrefabParent(Selection.activeGameObject)! = null;'返回適當的值。問題是在'編輯器'字段中'預製件上的動作'在'預製件'和'非預製件'對象上也是可見的。 –

+0

所以在你的編輯器中,當你選擇非預製對象這個領域是灰色的,不能點擊? –

+0

是的,我附上了幾張照片 –