Saltar al contenido principal

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

TipoFormato
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:

IdentificadorDescripciónConvenciónEjemplo
ManagerClases administradoras con singleton integradoUpperCamelCase + ManagerGameManager
ObjetoClases que representan objetos de juegoUpperCamelCaseCharacter
SubobjetoClases que representan una funcionalidad concreta de objetos de juegoUpperCamelCaseCharacterCombat
ControllerToma uno de los posibles controles de una clases objeto en concreto por parte de un sujetoUpperCamelCase + Sujeto + ControllerCharacterPlayerController
AssetClases que contiene una estructura de datos transferible a una clase Data desde un asset en forma de scriptable objectUpperCamelCase + AssetCharacterAsset
DataClases que contiene una estructura de datos utilizada por los objetosUpperCamelCase + DataCharacterData
ResponseClases que contiene una estructura de datos transferible a una clase Data desde una respuesta de un servidor en JSONUpperCamelCase + AssetCharacterAsset
MenuClase que contiene las funcionalidades de un menu completoUpperCamelCase + MenuSettingsMenu
Menu ElementClase que contiene las funcionalidades de un elemento de interfazUpperCamelCase + Menu + UpperCamelCase + ElementSettingsMenuSliderElement
EditorClase para herramientas de editorUpperCamelCase + EditorCharacterEditor

Coding

El formato de nombres en el código sigue las convenciones de Unity:

TipoConvenciónEjemplo
AttributeUpperCamelCaseRequired
ClassUpperCamelCaseCharacter
ConstantlowerCamelCaseattackId
EnumUpperCaseCharacterType
Event (Local)on + UpperCaseCharacterType
Event (Static)On + UpperCaseCharacterType
InterfaceIUpperCamelCaseIDamageable
MethodUpperCamelCaseTakeDamage()
NamespaceUpperCaseDevenant.Character
ParameterlowerCamelCasemaxDamage
PropertylowerCamelCasecurrentHealth

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.