Version: 6000.3
语言: 中文
创建脚本
检查脚本

命名脚本

仔细选择脚本文件的名称及其中声明的类非常重要。使用适当的文件名并在命名空间下组织类有助于确保编译器可以正确地识别您的类。

脚本文件名

您在创建脚本时输入的文件名也将用于其中定义的类的名称。脚本的文件名应与脚本中定义的类的名称匹配,这是一种很好的做法。

脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
派生自内置的 Unity 类型MonoBehaviourScriptableObject,即使文件名不匹配,Unity 仍然可以解析脚本中定义的类类型,但有一些限制:

  • 如果在脚本中定义了多个类,Unity 会选择与文件同名的类。
  • 如果使用 C#partial关键字来定义跨多个文件的单个 MonoBehaviour 派生类,只有与partial类可以用作组件游戏对象的功能部分。游戏对象可以包含任意数量的组件。Unity 有许多内置组件,您可以通过编写继承自 MonoBehaviour 的脚本来创建自己的组件。更多信息
    请参阅术语表
    .

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

类名和命名空间

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

为了避免类名冲突,在 C# 编程中最好在命名空间下组织类。命名空间是类的集合,以类名为前缀的命名空间提供了一种完整、明确的方式来引用类。有关详细信息,请参阅有关命名空间的 Microsoft 文档。

在下面的示例中,类Controller1Controller2是名为Enemy:

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

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

您可以通过添加using指令。

using Enemy;

这会导致编译器将此文件中的引用解析为Controller1Controller2Enemy.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 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
.Unity 2020.1 中引入了此限制,以提高导入和编译速度,因此一些较旧的资产商店Unity 和社区成员创建的不断增长的免费和商业资产库。提供各种各样的资产,从纹理、模型和动画到整个项目示例、教程和编辑器扩展。更多信息
请参阅术语表
因此,在引入此限制之前编写的包可能会无法正常运行。要解决与此问题相关的问题,请将每个命名空间中类的代码分开到单独的文件中。

其他资源

创建脚本
检查脚本