
Esta página proporciona una descripción general de PaddleBallSO, el proyecto de demostración complementario del libro electrónico Cree una arquitectura de juego modular en Unity con ScriptableObjects, y explica cómo utiliza patrones de diseño y modularidad en su arquitectura de código.
Esta es la primera de una serie de seis miniguías creadas para ayudar a los desarrolladores de Unity con la demostración que acompaña al libro electrónico. La demostración está inspirada en la mecánica clásica de los juegos arcade de pelota y paleta y muestra cómo ScriptableObjects puede ayudarlo a crear componentes que sean comprobables, escalables y fáciles de diseñar.
Juntos, el libro electrónico, el proyecto de demostración y estas miniguías brindan las mejores prácticas para usar patrones de diseño de programación con la clase ScriptableObject en su proyecto de Unity. Estos consejos pueden ayudarle a simplificar su código, reducir el uso de memoria y promover la reutilización del código.
Esta serie incluye los siguientes artículos:
Antes de sumergirse en el proyecto de demostración de ScriptableObject y en esta serie de miniguías, recuerde que, en esencia, los patrones de diseño son solo ideas. No se aplicarán a todas las situaciones. Estas técnicas pueden ayudarle a aprender nuevas formas de trabajar con Unity y ScriptableObjects.
Cada patrón tiene pros y contras. Elija sólo aquellos que beneficien significativamente su proyecto específico. ¿Sus diseñadores dependen en gran medida del Unity Editor? Un patrón basado en ScriptableObject podría ser una buena opción para ayudarlos a colaborar con sus desarrolladores.
En última instancia, la mejor arquitectura de código es la que se adapta a su proyecto y equipo.

PaddleBallSO se centra en el juego clásico que dio origen a los videojuegos modernos, con dos jugadores, dos palas y una pelota.
El énfasis aquí está en la infraestructura más que en la mecánica del juego. Piense en esto como “plomería del juego”, la base menos glamorosa pero de vital importancia que mantiene su aplicación en funcionamiento.
Este proyecto se centra en cómo ScriptableObjects puede funcionar entre bastidores para crear una aplicación unificada. Úselos para construir sistemas de juego versátiles que puedan simplificar el mantenimiento del proyecto y promover la reutilización del código. También puedes emplearlos para datos de jugadores, gestión del estado del juego, comportamientos en el juego y más.
El proyecto PaddleBallSO es compatible con la última versión de Unity Long Term Support (LTS), actualmente 2022 LTS. Incorpora el kit de herramientas de interfaz de usuario para crear una interfaz de usuario en tiempo de ejecución y el sistema de entrada para manejar las entradas del usuario.

Localiza y descarga el proyecto en el repositorio de GitHub.
Cargue Bootloader_scene o habilite Cargar escena Bootstrap en Play desde el menú GameSystems. Ingrese al modo Reproducir para comenzar.
Aunque no son específicos de ScriptableObjects, el proyecto de demostración utiliza un par de técnicas comunes para ayudar a iniciar la aplicación del juego en un estado consistente y predecible.
Un Scene Bootstrapper (o gestor de arranque) es un script de extensión del editor responsable de configurar el estado inicial del juego. Este código de inicialización está separado de la lógica del juego y garantiza que todas las dependencias estén configuradas correctamente para los objetos de la escena.
Para evitar problemas de dependencia, el programa previo configura objetos, administradores o servicios esenciales del juego cuando se carga una escena.
Si su aplicación Unity abarca varias escenas, el gestor de arranque puede forzar la carga de una escena de arranque específica, que es la primera escena de la configuración de compilación. Al salir del modo Reproducción, el Editor recarga la escena anterior.
Otro componente de la escena de arranque, el Administrador de secuencias, puede crear instancias de prefabricados esenciales al cargar la escena. En este proyecto de demostración específico, todo lo necesario para crear el juego es un Prefab, incluida una cámara, SplashScreen, menús de interfaz de usuario y un SceneLoader.
Luego, SceneLoader carga (y descarga) de forma aditiva cualquier escena de juego según sea necesario. En la mayoría de los casos, estas escenas se componen principalmente de casas prefabricadas.
Escenas del proyecto
Cada nivel de minijuego es una escena de Unity separada y aparece en la Configuración de compilación. Desactive SceneBootstrapper en el menú GameSystems si desea explorar esas escenas individuales.
Muchos proyectos también incluyen un área de preparación para el menú principal después de la escena de arranque. Este proyecto de demostración simplificado omite una escena del menú principal.

Utilice los menús Reproducir y Patrón para probar PaddleBallSO, que incluye:
La carpeta Core contiene partes del código base que no son específicas de la aplicación, como los scripts de patrones básicos, la gestión de escenas y la lógica de la interfaz de usuario. Estas son clases más generales que podrían aplicarse a una variedad de aplicaciones.

El juego de muestra recrea una simulación de física 2D icónica y muestra el potencial de los patrones de diseño basados en ScriptableObject.
Sin embargo, antes de profundizar en los patrones, querrás familiarizarte con los MonoBehaviours que componen la aplicación. Como era de esperar, componentes como los scripts Paddle, Ball, Bouncer y ScoreGoal gobiernan el juego básico.
Varios scripts de administrador de nivel superior controlan el flujo del juego:
Estos MonoBehaviours funcionan con sus ScriptableObjects. Desempeñan un papel vital al unir estos componentes para que puedan hablar y compartir datos entre ellos.
Los eventos son fundamentales para la comunicación entre las diferentes partes del proyecto. Conectan estos scripts del administrador con otros objetos de la escena y la interfaz de usuario. Esta arquitectura basada en eventos puede ayudar a que el código sea más organizado y depurable.
También proporcionamos ejemplos de demostración simplificados para cada uno de los patrones de ScriptableObject más comunes. A medida que te familiarices con ellos, empezarás a reconocer cómo los ScriptableObjects sustentan la arquitectura del minijuego.
Podríamos haber creado el minijuego presentado con muchas menos líneas de código, pero esta demostración se centra específicamente en patrones de diseño con ScriptableObjects. Tenga en cuenta que también puede implementar muchos de estos patrones sin ScriptableObjects.
Decida en equipo cómo se podría aplicar cada patrón a su proyecto y elija el enfoque que funcione mejor para usted.

La modularidad en el desarrollo de software implica dividir una aplicación en partes más pequeñas e independientes. Estos módulos tienen propósitos específicos y se pueden desarrollar y probar por separado.
Cada pequeño conjunto de objetos funciona como una unidad y maneja un aspecto del juego. Esto podría ser cualquier cosa, desde controlar la entrada del jugador, manejar la física o contar la puntuación.
Mientras explora los guiones del proyecto, preste atención a los siguientes puntos clave:
Refactorizar un script monolítico grande en partes más pequeñas promueve la reutilización y la escalabilidad. Esto conduce a una mejor colaboración en equipo y pruebas simplificadas.

Hemos creado el proyecto PaddleBallSO para demostrar los casos de uso de ScriptableObject. Aquí hay algunos lugares específicos donde los verás en acción:
¡Asegúrate de revisar también las demostraciones de patrones de diseño para ver algunos extras!

Si bien ScriptableObjects puede ser una herramienta poderosa para almacenar datos de juegos y optimizar su flujo de trabajo, es esencial usarlos de manera efectiva para evitar saturar su proyecto.
Estas son algunas de las mejores prácticas para usar ScriptableObjects en Unity:
Si sigue estas pautas, podrá evitar errores comunes de desarrollo.

Lea más sobre patrones de diseño con ScriptableObjects en el libro electrónico Cree una arquitectura de juego modular en Unity con ScriptableObjects. También puedes encontrar más información sobre los patrones de diseño de desarrollo comunes de Unity en el libro electrónico Mejora tu código con patrones de programación de juegos.