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

本文关键字:引用 MyScripts Unity 另一个 命名空间 | 更新日期: 2023-09-27 17:58:30

我使用的是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;",但也不起作用。

如有任何帮助,我们将不胜感激。

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

这看起来像是一个编译顺序问题。

如果SomeCarScript位于"Standard Assets"文件夹的子目录中,而ScriptA位于其他位置,则由于编译顺序的原因,ScriptA无法被引用。ScriptA是在SomeCarScript之后的阶段编译的,因此对于SomeCarScript不存在。

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

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

对于您的解决方案,您有两个选项:

  1. ScriptA移动到与SomeCarScript相同的目录(不推荐)
  2. SomeCarScript移动到不是"标准资产"、"专业标准资产"或"插件"子目录的目录(推荐)

查看有关脚本编译顺序的Unity手册页面,了解更多信息。