Sistema de modales para Unity

Modales de confirmación, aviso y entrada reutilizables, dirigidos por señales tipadas y parámetros compartidos.

Para qué sirve este sistema

Los modales son una de esas partes de UI que todo el mundo reinventa. Confirmaciones de salida, reset a valores por defecto, fin de sesión, reiniciar partida y diálogos genéricos OK acaban implementados por separado, cada uno con su prefab, sus callbacks y su propia forma de devolver el resultado. El código que abre un modal suele referenciar el prefab directamente, lo que hace imposible cambiar el aspecto sin romper la capa de juego.

El Sistema de Modales de Serenity describe el flujo como un pequeño conjunto de señales y parámetros. Cualquier sistema puede pedir un modal lanzando una señal. El servicio se encarga de la presentación, de la respuesta del usuario y de la opción enviada. El código de juego lee un resultado tipado sin saber qué prefab hay en pantalla.

El problema en Unity

Unity no incluye un sistema de modales con opinión. La mayoría de proyectos acaba con uno de dos patrones: UnityEvents repartidos en un prefab de confirmación o un manager estático al que llama todo el mundo. Los dos hacen que añadir un nuevo diálogo implique duplicar boilerplate y los dos meten detalles de presentación en el código de juego.

Los modales también tienen que coordinarse con el resto de la UI. Bloquean el input de la pantalla que tienen detrás, no deben chocar con los menús, necesitan localización para sus textos y su estilo visual debe encajar con el tema de UI activo. Cuando esa coordinación es a medida, los modales son donde se acumulan pequeños bugs de UX.

Cómo lo aborda Serenity

Serenity expone el flujo modal como datos y señales. Los parámetros del modal describen los botones, los textos y la opción de destino que el modal debe presentar. Una vista de modal recibe esos parámetros, los renderiza a través del tema de UI activo y reporta de vuelta mediante casos de uso como ModalSelectOption, ModalSubmitOption o ModalCancel. Las intenciones modales comunes son señales de primer nivel: OnShowModalSignal, OnCloseModalSignal, ShowEndGameSessionModalSignal, ShowExitApplicationModalSignal, ShowRestartGameModalSignal y ShowSetSettingsToDefaultModalSignal.

Esto mantiene el código que llama libre de referencias a prefabs. Pedir una confirmación es lanzar una señal con los parámetros adecuados. Leer el resultado es suscribirse a OnModalSubmitOptionSignal. El prefab del modal y su presentación pueden cambiar sin tocar nada más.

Cómo encaja en Serenity

El Sistema de Modales vive en el namespace Serenity.Modal y refleja la estructura por capas del resto de la foundation: interfaces de Dominio para el contrato del modal, casos de uso y señales en la capa de Aplicación, y la capa de Infraestructura para el servicio Unity, las factorías y las vistas. Un instalador registra el servicio y las factorías en el resto del proyecto.

Los modales conectan con varios sistemas por diseño. Los Temas de UI dirigen el estilo visual y el feedback sonoro. Localización gestiona los textos y los botones. El Event Dispatcher transporta las señales de mostrar y cerrar. El Sistema de Menús usa modales para las confirmaciones lanzadas desde pantallas de ajustes o pausa. Las señales de Game Mode pueden pedir modales cuando una transición necesita confirmación del usuario, como acabar una sesión o volver al menú principal.

Flujo de trabajo práctico

  1. Decide qué modal necesitas: una confirmación genérica, una intención predefinida como salir de la aplicación o un modal a medida con tus propios parámetros.
  2. Construye o reutiliza un objeto de parámetros con etiquetas, botones y payload de opción.
  3. Lanza la señal correspondiente, por ejemplo OnShowModalSignal con tus parámetros o ShowRestartGameModalSignal para la intención predefinida.
  4. Deja que el servicio de modal elija la vista a través de su factoría y la renderice mediante el tema de UI activo.
  5. Suscríbete a OnModalSubmitOptionSignal o OnCloseModalSignal para reaccionar a la elección del jugador.
  6. Cambia el estilo del modal editando el prefab de vista o el tema, sin tocar el código que llama.

Qué incluye

  • Parámetros de modal configurables con etiquetas, botones y payload de opción
  • Casos de uso para seleccionar opción, confirmar, cambiar valor y cancelar
  • Señales de intención predefinidas como ShowExitApplicationModalSignal y ShowRestartGameModalSignal
  • Señales salientes OnShowModalSignal, OnCloseModalSignal y OnModalSubmitOptionSignal
  • Factorías de vista, presenter y servicio que mantienen la capa visual reemplazable
  • Integración con el tema de UI compartido para que los modales encajen con el resto de la interfaz
  • Integración con Localización para textos y etiquetas de botones
  • Instalador que registra el servicio una sola vez en todo el proyecto

Cuándo usarlo

  • Proyectos que necesitan diálogos coherentes de confirmación, aviso y entrada entre pantallas.
  • Juegos donde los flujos de fin de sesión, reinicio, salida y reset a valores por defecto deben tener el mismo aspecto y comportamiento.
  • Equipos que quieren dirigir los diálogos de UX desde el código de juego sin referenciar prefabs de UI.
  • Bases de código que se mueven de los prefabs de confirmación por pantalla a una pipeline de modales compartida.

Sistemas relacionados

Usa Serenity cuando quieras flujos modales ya conectados con temas, localización y señales, pero que sigan siendo adaptables a tu propia UI.

Volver a la página principal