Version: 2017.1
Coroutines (corrutinas)
Atributos

Namespaces

A medida que los proyectos se hacen más grandes y el número de scripts aumente, la probabilidad de tener choques entre nombres de clases de script aumenta aun más. Esto en especial es verdad cuando varios programadores están trabajando en diferentes aspectos del juego de manera separada y van a eventualmente combinar sus esfuerzos en un proyecto. Por ejemplo, un programador puede estar escribiendo el código para controlar el personaje principal del jugador mientras otro escribe el código equivalente para el enemigo. Ambos programadores pueden escoger llamar su clase principal de script Controller, pero esto puede causar un choque cuando sus proyectos sean combinados.

Hasta cierto punto, este problema puede ser evitado adoptando una convención de nombre o al renombrar las clases cuando un choque sea descubierto (eg, las clases de arriba podrían tener nombres como PlayerController y EnemyController). Sin embargo, esto es un problema cuando hay varias clases con nombres que choquen, o cuando las variables son declaradas utilizando esos nombres - cada mención del nombre de la clase vieja debe ser remplazado para que el código compile.

El lenguaje C# ofrece una característica llamada namespaces que resuelve este problema de manera robusta. Un namespace es simplemente una colección de clases que son referenciadas por utilizar un prefijo escogido en el nombre de la clase. En el ejemplo de abajo, las clases Controller1 y Controller2 son miembros del namespace llamado Enemy:

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

En código, estas clases son referenciadas como Enemy.Controller1 y Enemy.Controller2, respectivamente. Esto es mejor que mantener las clases en medida a que las declaraciones de namespace puedan ser metidas entrecorchetes alrededor de declaraciones de clases existentes (ie, no es necesariamente que cambie los nombres de las clases individualmente). Adicionalmente, usted puede utilizar muchas secciones entrecorchetes de namespace alrededor de clases dónde sea que ocurran, incluso si esas clases son diferentes archivos fuentes.

Puedes evitar tener que teclear varias veces el prefijo del namespace añadiendo una directiva using al comienzo del archivo.

 using Enemy;

La linea indica que dónde el nombre de la clases Controller1 y Controller2 sean encontradas, estas deberían ser tomadas para que signifiquen Enemy.Controller1 y Enemy.Controller2, respectivamente. Si el script también necesita referenciar otras clase con el mismo nombre desde un diferente namespace (una llamada Player, digamos), luego el prefijo puede todavía ser utilizado. Si los dos namespaces que contienen nombres de clases que choquen son importados utilizando las directivas al mismo tiempo, el compilador va a reportar un error.

Coroutines (corrutinas)
Atributos