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 |
Da utilizzare durante la creazione di sistemi di gioco Unity riutilizzabili, la creazione di pacchetti UPM o la progettazione di un'architettura modulare basata su ScriptableObject per sistemi di gioco come inventario, combattimento, dialogo, missioni o salvataggio/caricamento. Utilizzare anche quando si collegano più pacchetti Unity indipendenti che devono comunicare senza dipendenze dirette. Fonte: eyenpi/unity-systems-skills.