プロジェクトが大きくなり、スクリプト数が増えるにつれてスクリプトクラス名が衝突する可能性が増大します。これはゲームの異なるパーツを別々に作業し、最終的に同じプロジェクトに統合する場合に当てはまります。例えば一人のプログラマがメインプレイヤーの制御コードを作成し、もう一人が敵キャラクターの制御コードを作成したとします。二人ともメインのスクリプトクラスを 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.Controller1 と Enemy.Controller2 にと解釈されます。もしスクリプトが別の名前空間から同じ名前のクラスを参照する必要がある場合(例えば Player )もプレフィックスを使い続けることができます。ただし、衝突するクラス名を含む二つの名前空間が using ディレクティブを使用して同時にインポートされた場合はコンパイラでエラーが発生します。