如何从另一个命名空间(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_reference
和global::flag_I_want_to_reference
,但都不起作用。我也试过using "Assets/MyScripts/ScriptA.cs;"
,但也不起作用。
如有任何帮助,我们将不胜感激。
这看起来像是一个编译顺序问题。
如果SomeCarScript
位于"Standard Assets"文件夹的子目录中,而ScriptA
位于其他位置,则由于编译顺序的原因,ScriptA
无法被引用。ScriptA
是在SomeCarScript
之后的阶段编译的,因此对于SomeCarScript
不存在。
在特定阶段编译的所有代码都可以访问在相同阶段或早期期间编译的代码,但不能访问将在稍后阶段编译的代码(因为对于正在编译的代码来说,它还不存在)。
一般做法是将引用标准资产脚本的所有代码保存在"标准资产"以外的文件夹中,以便在稍后阶段进行编译,并能够访问所有其他代码。
对于您的解决方案,您有两个选项:
- 将
ScriptA
移动到与SomeCarScript
相同的目录(不推荐) - 将
SomeCarScript
移动到不是"标准资产"、"专业标准资产"或"插件"子目录的目录(推荐)
查看有关脚本编译顺序的Unity手册页面,了解更多信息。