当项目越来越大,脚本越来越多,脚本类名间发生冲突的可能性就越大。现实的游戏开发中,是数名程序员针对游戏不同的方面分别开发,但最后都会把各自的劳动成果汇总到一个项目里。但当一位程序员为游戏主角写控制他的代码时,另一位程序员写了相同的代码,用来控制敌人。它们两个可能都选择Controller来作为这个脚本里这个类的类名,当项目合并时,就可能导致冲突。

    在某种程度上,这个问题可以通过采用一套命名规则或重命名类来避免(比如 :命名为PlayerController和EnemyController)。可是,当好几个类都发生冲突,或者变量也用这些名字声明时,这就变得很麻烦。

    C#提供了一个叫命名空间(namespace)的特性,它能轻易的解决上面遇到的问题。命名空间是一个类的集合。下面的例子中,类Controller1和类Controller2是命名空间Enemy的成员:

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

    在代码中,这两个类各自通过Enemy.Controller1和Enemy.Controller2的方式引用。这比在命名空间的范围内重命名类名要好的多(比如,没必要单独改变类名)。而且,你能使用多种命名空间来区分你的类,无论它们出现在哪,即使这些类在不同的源文件夹里都可以这样操作。

    你也可以不用每次都加命名空间的前缀,只需使用using关键字在代码的顶部就可以了:

using Enemy;

    这行代码表明类Controller1和 Controller2可以在Enemy这个命名空间中被找到,这等价于Enemy.Controller1,Enemy.Controller2。如果脚本需要引用的同名类来自不同的命名空间,那么前缀就是必须的了。如果两个命名空间包含了冲突的类名,当都直接用using关键字直接引用的话,编译器就会报错。