C# para Unity · Sección 10

Arquitectura y organización del proyecto

Convenciones, documentación, validación, ScriptableObject, namespaces, compilación condicional y Assembly Definitions para proyectos escalables.

3
lecciones
3
ejercicios resueltos
CONTENIDO ORIGINAL

Avanza en orden. Cada lección está redactada para Palta es Cool, utiliza ejemplos propios y termina con una actividad cuya respuesta puedes desplegar.

ANTES DE EMPEZAR

Ubícate antes de avanzar

01 / PUNTO DE PARTIDA

Conviene haber comprendido Delegados, eventos y callbacks.

02 / META OBSERVABLE

Al terminar deberías poder relacionar Código y validación con ScriptableObject y resolver un caso nuevo.

03 / TIEMPO SUGERIDO

Reserva entre 75 y 120 minutos o divide el laboratorio en dos sesiones.

04 / PREPARA EL LABORATORIO

Instala Unity Hub, una versión LTS compatible y un IDE con integración para C#. Conserva un proyecto de laboratorio separado.

Abrir la guía de herramientas →
Diagnóstico rápido: ¿cómo se relacionan Código y validación y ScriptableObject? +

No necesitas acertar todavía. Escribe una hipótesis de dos líneas y compárala con tu respuesta al finalizar; si puedes corregirla y justificar el cambio, hubo aprendizaje.

Ruta guiada · 3 lecciones

Aprende el tema paso a paso

Construirás límites que reduzcan recompilación, dependencias y errores al crecer el proyecto, sin convertir la arquitectura en ceremonia.

Al terminar podrás
  • Convenciones, documentación y validación reducen costo de cambio
  • ScriptableObject comparte configuración, no estado accidental
  • Namespaces y Assembly Definitions vuelven explícitas las dependencias
01
Hacer predecible el código

Convenciones, documentación y validación reducen costo de cambio

Nombres consistentes, orden de miembros y una responsabilidad por archivo facilitan navegar. Los comentarios explican decisiones; la documentación XML describe APIs públicas. Helpers deben agruparse por dominio y ser preferentemente puros.

01

Una guía corta y aplicada supera reglas extensas ignoradas.

02

OnValidate detecta referencias y rangos cerca del origen.

03

Una utilidad sin dominio suele convertirse en cajón de sastre.

Comprueba lo aprendido · 01

¿Qué debe explicar un comentario que el código no puede decir por sí solo?

Mostrar respuesta +

La razón de una decisión, una restricción externa, una unidad inesperada o el costo aceptado; no una traducción literal de la instrucción.

02
Separar datos de instancias

ScriptableObject comparte configuración, no estado accidental

Un ScriptableObject es un asset serializado que puede alimentar varios prefabs. Funciona bien para definiciones de armas, items o reglas. El estado temporal de una partida no debería escribirse sin intención en el asset compartido.

01

El asset representa datos persistentes de diseño.

02

La instancia representa estado mutable durante el juego.

03

Clonar o copiar evita contaminar configuración compartida.

Comprueba lo aprendido · 02

¿Qué problema aparece al guardar vidaActual de un enemigo dentro del asset compartido?

Mostrar respuesta +

Todas las instancias podrían compartir o persistir ese cambio. La vida actual pertenece a cada enemigo; el asset debería contener configuración como vida máxima.

03
Definir límites técnicos

Namespaces y Assembly Definitions vuelven explícitas las dependencias

Namespaces evitan colisiones y expresan módulos. Assembly Definitions separan compilación de runtime, editor y tests, reducen recompilación y bloquean dependencias indebidas. La compilación condicional debe probarse en cada variante.

01

Carpeta y namespace pueden alinearse sin ser lo mismo.

02

Runtime nunca debe depender del ensamblado Editor.

03

No fragmentes ensamblados sin una frontera real.

Comprueba lo aprendido · 03

¿Qué beneficio ofrece una Assembly Definition además de compilar menos?

Mostrar respuesta +

Hace visibles y verificables las dependencias entre módulos, evitando que cualquier script acceda accidentalmente a cualquier otro.

Resumen de la sección

Tu recorrido en tres ideas

  1. Convenciones, documentación y validación reducen costo de cambio
  2. ScriptableObject comparte configuración, no estado accidental
  3. Namespaces y Assembly Definitions vuelven explícitas las dependencias
PROFUNDIZACIÓN / LABORATORIO GUIADO

Separa un módulo de armas en cuatro fronteras

Une datos configurables, estado de instancia, namespaces, ensamblados, validación y pruebas.

CASO

El sistema mezcla datos, munición actual, Inspector, efectos visuales y utilidades de Editor en un solo script.

Procedimiento

  1. Dibuja dependencias y distingue configuración, runtime, presentación y editor.
  2. Crea namespaces y ensamblados mínimos para Runtime, Editor y Tests.
  3. Migra en pasos pequeños y verifica prefabs, assets y compilación.

Evidencia mínima

  • Diagrama antes y después.
  • Runtime no referencia UnityEditor.
  • Dos armas comparten configuración sin compartir munición actual.
Mostrar razonamiento modelo +

ArmaData conserva valores persistentes; ArmaRuntime posee estado; la vista reacciona; Editor mejora autoría; Tests referencia Runtime. Las fronteras existen por razones de cambio, no por cantidad de carpetas.

Para ir más lejos

¿Qué ensamblado debería conocer una integración exclusiva de Android?

CIERRE DE LA SECCIÓN

Comprueba que puedes usarlo

Antes de continuar, revisa estos tropiezos frecuentes y resuelve un caso sin copiar los ejemplos.

ERROR 01

Convertir Helper en un cajón de sastre que conoce todo el proyecto.

ERROR 02

Guardar estado temporal de una partida dentro de un ScriptableObject compartido.

DESAFÍO INTEGRADOR

Ahora hazlo sin guía

Organiza un módulo de combate con runtime, datos ScriptableObject, editor y tests separados por namespaces y ensamblados.

Mostrar pauta de corrección +
Una respuesta sólida:
  • Las dependencias avanzan en una dirección y runtime no referencia Editor.
  • Configuración persistente y estado de instancia están separados.
  • Las fronteras reducen acoplamiento sin fragmentar el proyecto arbitrariamente.