我正在使用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_reference
和global::flag_I_want_to_reference
,但这不起作用。我也试过using "Assets/MyScripts/ScriptA.cs;"
,但这也不起作用。
非常感谢任何帮助。
答案 0 :(得分:1)
这看起来像编译订单问题。
如果SomeCarScript
位于“标准资产”文件夹的子目录中,而ScriptA
位于其他位置,则因为编译顺序无法引用ScriptA
。 ScriptA
在 SomeCarScript
之后的阶段编译,因此SomeCarScript
不存在。
在特定阶段编译的所有代码都可以访问在相同阶段或早期阶段编译的代码,但不代码将在后期编译(因为,对于正在编译的代码,它还不存在)。
一般做法是将所有引用标准资产脚本的代码保存在其他文件夹而不是“标准资产”中,以便在稍后阶段编译并能够访问所有其他代码。
来到您的解决方案,您有两个选项:
ScriptA
移至与SomeCarScript
相同的目录(不推荐)SomeCarScript
移至目录,该目录不是“标准资产”,“专业标准资产”或“插件”(推荐)的子目录查看Unity Manual page concerning script compilation订单以获取更多信息。