如何在另一个命名空间(Unity)中引用MyScripts中的类?

时间:2016-07-25 15:11:35

标签: c# unity3d

我正在使用Unity 5.3.5。我有一个我在Unity Assets/MyScript文件夹下编写的脚本。

ScriptA.cs

public class ScriptA : MonoBehaviour
{
    //code here
    public static bool flag_I_want_to_reference;
}

然后,因为我正在使用Unity标准资产工具/汽车用品,它位于不同文件夹路径中的单独命名空间中(即不在MyScripts文件夹中,而是在Assets下的不同路径中)

SomeCarScript.cs

namespace UnityStandardAssets.Vehicles.Car
{
    public class SomeCarScript : MonoBehaviour
    {
        //code here
        bool foo = ScriptA.flag_I_want_to_reference;
    }
}

现在,我有一个bool我想在SomeCarScript.cs内引用,但我收到错误The name 'ScriptA' does not exist in the current context

我试图找出在SomeCarScript.cs脚本顶部使用using语句需要具有的类/引用来使其工作。我尝试查找全局命名空间并尝试global::ScriptA.flag_I_want_to_referenceglobal::flag_I_want_to_reference,但这不起作用。我也试过using "Assets/MyScripts/ScriptA.cs;",但这也不起作用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这看起来像编译订单问题。

如果SomeCarScript位于“标准资产”文件夹的子目录中,而ScriptA位于其他位置,则因为编译顺序无法引用ScriptAScriptA SomeCarScript之后的阶段编译,因此SomeCarScript不存在。

在特定阶段编译的所有代码都可以访问在相同阶段或早期阶段编译的代码,但代码将在后期编译(因为,对于正在编译的代码,它还不存在)。

一般做法是将所有引用标准资产脚本的代码保存在其他文件夹而不是“标准资产”中,以便在稍后阶段编译并能够访问所有其他代码。

来到您的解决方案,您有两个选项:

  1. ScriptA移至与SomeCarScript相同的目录(不推荐)
  2. SomeCarScript移至目录,该目录不是“标准资产”,“专业标准资产”或“插件”(推荐)的子目录
  3. 查看Unity Manual page concerning script compilation订单以获取更多信息。