Version: Unity 6.0 (6000.0)
语言 : 中文
创建脚本
检查脚本

命名脚本

务必为脚本文件以及其中声明的类仔细选择名称。使用适当的文件名并在命名空间下整理类,有助于确保编译器能够识别您的类而不会出现错误。

脚本文件名

在创建脚本时输入的文件名也将用于其中定义的类的名称。脚本的文件名最好与其内部定义的类的名称匹配。

对于从内置 Unity 类型 MonoBehaviourScriptableObject 派生的脚本,即使文件名不匹配,Unity 仍然可以解析脚本中定义的类类型,但存在一些限制:

  • 如果在脚本中定义了多个类,Unity 会选择与文件同名的类。
  • 如果使用 C# partial 关键字在多个文件中定义单个 MonoBehaviour 派生的类,则只有与 partial 类同名的文件才能用作组件

注意:在类名称无法与特定文件明确匹配的所有情况下,Unity 都会显示警告。

类名称和命名空间

在项目的不同部分中声明多个同名类时,会产生命名冲突。命名冲突的可能性会随着项目规模和贡献者数量的增加而增加。例如,一个开发者可能会编写代码来控制主要玩家角色,而另一个开发者则为敌人编写等效的代码。如果两个开发者都选择调用他们的主类 Controller,编译器将无法确定引用的是代码中 Controller 的哪些类用法。

为了避免类名称冲突,在 C# 编程中,最好将类整理在命名空间下。命名空间是类的集合,类名称前面的命名空间提供了一种完整、明确的方式来引用类。有关更多信息,请查看关于命名空间的 Microsoft 文档。

在下面的示例中,类 Controller1Controller2 是名为 Enemy 的命名空间的成员:

namespace Enemy {
    public class Controller1 : MonoBehaviour {
        ...
    }
    
    public class Controller2 : MonoBehaviour {
        ...
    }
}

您可以使用这些类的完整名称在代码中明确引用它们。完整名称是命名空间加上类名称,在本例中分别为 Enemy.Controller1Enemy.Controller2。可以在现有类声明周围添加命名空间声明,因此无需单独更改所有类的名称。无论类在任何位置,均可在类周围添加命名空间声明,即使这些类位于不同的源文件中也是如此。

通过在文件顶部添加 using 指令,可避免重复输入命名空间前缀。

using Enemy;

这会导致编译器将此文件中对 Controller1Controller2 的引用分别解析为 Enemy.Controller1Enemy.Controller2。如果脚本还需要引用不同命名空间中同名的类(比如说名为 Player 的命名空间),那么必须指定命名空间前缀。如果在相同文件中使用 using 指令导入两个包含冲突类名的命名空间,则编译器将报错。

多个命名空间的限制

Unity 在命名空间和 MonoBehaviour 或 ScriptableObject 类方面有特定的限制。如果文件包含 MonoBehaviour 或 ScriptableObject 类的定义,则不能在该文件中使用多个命名空间。

Unity 在控制台中给出以下警告:

Class MyClass can not exist in multiple namespaces in the same file, even if one is excluded with preprocessor directives. Please move these to separate files if this is the case.

如果您有一个文件在一个命名空间中定义 MonoBehaviour,而其他类在同一文件的不同命名空间中定义,Unity 将无法识别 MonoBehaviour 类,并且无法将其用于游戏对象。Unity 2020.1 中引入了此限制以提高导入和编译速度,因此,引入此限制之前编写的一些较旧的资源商店资源包可能会无法正常运行。要解决与此问题相关的问题,请将每个命名空间中的类的代码分开以分离文件。

其他资源

创建脚本
检查脚本