Build every gameplay system as a self-contained UPM package. Data lives in ScriptableObjects, behavior lives in small single-responsibility MonoBehaviours, and systems talk through SO Event Channels — never direct references.
| One system = one UPM package | Create a "shared contracts" package with interfaces | | Data in ScriptableObjects, behavior in MonoBehaviours | Put data and behavior in the same class |
| MonoBehaviour [SerializeField] only for SO refs, component refs, scene refs, UnityEvents | [SerializeField] primitives (float, int, bool, string, LayerMask, enum, AnimationCurve) directly on MonoBehaviours — these belong in an SO Config asset | | SO Event Channels for cross-system communication | Use singletons, service locators, or static managers |
Úselo al crear sistemas de juegos Unity reutilizables, crear paquetes UPM o diseñar una arquitectura modular basada en ScriptableObject para sistemas de juego como inventario, combate, diálogo, misiones o guardar/cargar. Utilícelo también cuando conecte varios paquetes independientes de Unity que necesiten comunicarse sin dependencias directas. Fuente: eyenpi/unity-systems-skills.