Tabla de convenciones de nombres y estructura de carpetas en proyectos de Unity.
Esta documentación detalla las convenciones de nombres y la estructura de carpetas que deben seguir todos los miembros del equipo. El idioma principal es el inglés, con excepción de la documentación, que se desarrolla en dos idiomas (inglés y español), y de Jira, donde se utiliza el español para un mejor entendimiento de las tareas.
Assets
Se especifican los tipos de assets y sus convenciones de nombre, así como la organización de carpetas en el proyecto de Unity.
Estructura
Dentro de la carpeta "Assets" del proyecto, crearemos una subcarpeta llamada "Project", que será la carpeta raíz principal. Esto permite mantener otras carpetas y plugins fuera de la estructura principal del proyecto.
La estructura de carpetas dentro de "Project" será la siguiente (esta puede variar según el proyecto):
.
├── Art -> Contiene todos los activos artísticos como modelos, texturas, sonidos, etc.
│ ├── Audio
│ │ ├── FX
│ │ └── Music
│ ├── Characters
│ │ └── *Sample*
│ │ ├── Animations
│ │ ├── Materials
│ │ ├── Model
│ │ └── Textures
│ ├── Environment
│ └── UI
│ ├── Fonts
│ └── Sprites
├── Data -> Files that contain data, structures, scriptable objects, or prefabs.
│ ├── Application -> General scriptable objects.
│ │ ├── Achievements
│ │ ├── Avatars
│ │ └── Purchases
│ ├── Game -> Game-specific scriptable objects.
│ │ ├── Character
│ │ ├── Environment
│ │ └── Tutorial
│ ├── Prefabs -> All prefabs of the project.
│ │ ├── Character
│ │ ├── Environment
│ │ └── Menu
│ ├── Localization -> Files for localization.
│ └── Rendering -> Render Pipeline configuration files.
├── Scenes -> All scenes of the project.
└── Scripts
├── Data -> Asset, data, and response scripts.
├── Editor -> Editor tool scripts.
├── Game -> Object, sub-object, and controller scripts.
├── Management -> Management scripts.
├── Menu -> Menu and menu item scripts.
└── Shaders
Convención de Nombres
Para los nombres de assets, utilizaremos el formato UpperCamelCase y añadiremos prefijos o sufijos, separados por un guión bajo (_), para diferenciar los tipos de assets. Los prefijos indican la categoría del asset (p. ej., personajes, props, logros, música), mientras que los sufijos especifican el tipo de asset.
Ejemplo de Convención: Para un modelo 3D de un personaje principal, Marc Ground:
- Prefijo: "Character_", ya que el asset pertenece a la categoría de personajes.
- Nombre: "MarcGround", en UpperCamelCase.
- Sufijo: "_Model", ya que se trata de un modelo. Así, el nombre del asset será Character_MarcGround_Model.
Nota: Los assets raíz (scriptable objects o prefabs) no requieren sufijo. Sin embargo, si un prefab está asociado a un scriptable object, entonces se usa el sufijo "_Prefab".
Formatos
| Tipo | Formato |
|---|---|
| Animaciones | .anim |
| Audios | .wav |
| Materiales | .mat |
| Modelos 3D | .fbx |
| Prefabs | .prefab |
| Scriptable Objects | .asset |
| Shaders | .shader |
| Sprites | .png |
| Texturas | .png |
C#
Clases
Las clases deben nombrarse en formato UpperCamelCase según las siguientes convenciones:
| Identificador | Descripción | Convención | Ejemplo |
|---|---|---|---|
| Manager | Clases administradoras con singleton integrado | UpperCamelCase + Manager | GameManager |
| Objeto | Clases que representan objetos de juego | UpperCamelCase | Character |
| Subobjeto | Clases que representan una funcionalidad concreta de objetos de juego | UpperCamelCase | CharacterCombat |
| Controller | Toma uno de los posibles controles de una clases objeto en concreto por parte de un sujeto | UpperCamelCase + Sujeto + Controller | CharacterPlayerController |
| Asset | Clases que contiene una estructura de datos transferible a una clase Data desde un asset en forma de scriptable object | UpperCamelCase + Asset | CharacterAsset |
| Data | Clases que contiene una estructura de datos utilizada por los objetos | UpperCamelCase + Data | CharacterData |
| Response | Clases que contiene una estructura de datos transferible a una clase Data desde una respuesta de un servidor en JSON | UpperCamelCase + Asset | CharacterAsset |
| Menu | Clase que contiene las funcionalidades de un menu completo | UpperCamelCase + Menu | SettingsMenu |
| Menu Element | Clase que contiene las funcionalidades de un elemento de interfaz | UpperCamelCase + Menu + UpperCamelCase + Element | SettingsMenuSliderElement |
| Editor | Clase para herramientas de editor | UpperCamelCase + Editor | CharacterEditor |
Coding
El formato de nombres en el código sigue las convenciones de Unity:
| Tipo | Convención | Ejemplo |
|---|---|---|
| Attribute | UpperCamelCase | Required |
| Class | UpperCamelCase | Character |
| Constant | lowerCamelCase | attackId |
| Enum | UpperCase | CharacterType |
| Event (Local) | on + UpperCase | CharacterType |
| Event (Static) | On + UpperCase | CharacterType |
| Interface | IUpperCamelCase | IDamageable |
| Method | UpperCamelCase | TakeDamage() |
| Namespace | UpperCase | Devenant.Character |
| Parameter | lowerCamelCase | maxDamage |
| Property | lowerCamelCase | currentHealth |
Depuración
Al depurar, se debe indicar la clase y el método de origen, seguido del mensaje:
Debug.LogError("GameManager/StartGame: Game can not start before GameManager setup");
Niveles de Depuración en Unity
- Log: Información sobre procesos finalizados correctamente.
- LogWarning: Información sobre procesos que han finalizado pero que han encontrado algún error no determinante.
- LogError: Información sobre un proceso que no ha finalizado debido a un error en el mismo.
Versionado
El versionado sigue la convención Mayor.Menor.Parche:
- Mayor: Cambios en sistemas centrales.
- Menor: Nuevas características sin alterar el núcleo.
- Parche: Soluciones de errores en características existentes.
Ejemplo: En la versión 1.4.2, agregar un nuevo tipo de arma incrementaría el campo menor (1.5.0). Un parche posterior para corregir un error en habilidades llevaría la versión a 1.5.1.