“菜单组件/ MaterialUI / Toaster无法检查,因为不存在”错误,但确实存在

时间:2019-08-13 16:58:44

标签: c# visual-studio unity3d

我尝试为Android运行我的Unity项目(不确定是否重要),但是我从同一来源收到多个错误,提示“由于不存在,无法检查Menu Component / MaterialUI / Toaster”。当我查找这些文件时,它们确实存在于适当的位置,并且我认为它们没有任何问题。

任何人都可以帮助我弄清楚为什么说这些文件不存在吗?

这是我的工作环境(https://imgur.com/ZW5BUTQ)的屏幕截图

我没有太多的Unity背景知识,在互联网上其他任何地方也找不到此问题。不确定我可以尝试什么。有问题的文件可以很好地打开,并且代码中没有错误。

预期结果应该是找到这些文件,而不是将其标记为不存在。

1 个答案:

答案 0 :(得分:0)

  

我在互联网上其他任何地方都找不到此问题

有一个最可能相关的Issue report


ProtoPottyGames提供了可能的修补程序:

  

只要删除错误所在的任何文件中带有Component/的部分

     

Bugged代码:

[MenuItem("Component/Physics/Obi/Obi Particle Renderer", false, 0)]
     

固定代码:

[MenuItem("Physics/Obi/Obi Particle Renderer", false, 0)]

或者,如新版Unity文档中所述,最好使用[AddComponentMenu] attribute来更好地组织组件菜单。


因此,由于您有权访问原始脚本文件,因此您只需在VisualStudio(或您使用的任何工具)中搜索整个解决方案,即可找到相应的字符串,例如

"Component/MaterialUI/Toaster"

并替换为

[MenuItem("MaterialUI/Toaster")] 

以便将其放置在单独的菜单中

[AddComponentMenu("MaterialUI/Toaster")]

以便仍将其放置在组件的子菜单中。

很有可能会在MaterualUI/Editor文件夹中的脚本中找到这些方法。


另一个原因可能是这些确实只是检查方法(请参见[MenuItem]的布尔参数)。如果您有

[MenuItem("SomeMenu/SomeEntry", true)]
private static bool CanClick()
{
    // return true or false depending on some condition
    return false;
}

这是用于类似方法的检查器方法

[MenuItem("SomeMenu/SomeEntry")]
private static void DoSomething()
{
    // ...
}

现在,如果第二个方法不存在或其路径字符串被更改,则Unity会抱怨,因为没有菜单项具有与第一个方法相同的路径。这可能会发生如果它们是在不同的类中实现的(理论上是愚蠢的,但可能的话),并且删除了具有实际void方法的类。


注意:接下来要担心的是关于您在某处尝试使用new SomeMonoBehaviourClass()的警告...