Version: 2020.1
Coroutines
Attributes

Пространства имён

Когда проект становится больше, а количество классов увеличивается, вероятность совпадения имён классов также возрастает. Такое может произойти, если несколько программистов работают отдельно над различными аспектами игры. Например, один программист пишет код для управления персонажем игрока, в то время как другой пишет эквивалентный код для управления противниками. Оба программиста предпочли назвать главный класс Controller, однако при объединении их проектов это приведет к совпадению имен классов, в результате чего использование класса с таким именем оказалось бы двусмысленным.

В некоторой степени, эта проблема может быть решена путем переименования классов, когда обнаружено совпадение имен (например, классы выше могут иметь имена PlayerController и EnemyController). Однако, это весьма проблематично, когда есть несколько таких классов, или когда объявляются переменные с их использованием - каждое упоминание старого названия класса должно быть заменено, чтобы код мог скомпилироваться.

The C# language offers a feature called namespaces that solves this problem in a robust way. A namespace is simply a collection of classes that are referred to using a chosen prefix on the class name. See Microsoft’s documentation on namespaces for more information.

In the example below, the classes Controller1 and Controller2 are members of a namespace called 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), то для их вызова нужно будет указать префикс. Если имена используемых классов из двух разных пространств имен указанных в директиве совпадут - компилятор сообщит об ошибке.

Coroutines
Attributes