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 |
À utiliser lors de la création de systèmes de jeu Unity réutilisables, de la création de packages UPM ou de la conception d'une architecture modulaire basée sur ScriptableObject pour des systèmes de jeu tels que l'inventaire, le combat, le dialogue, les quêtes ou la sauvegarde/chargement. À utiliser également lors de la connexion de plusieurs packages Unity indépendants qui doivent communiquer sans dépendances directes. Source : eyenpi/unity-systems-skills.