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 |
Verwenden Sie es, wenn Sie wiederverwendbare Unity-Spielsysteme erstellen, UPM-Pakete erstellen oder eine ScriptableObject-basierte modulare Architektur für Gameplay-Systeme wie Inventar, Kampf, Dialog, Quests oder Speichern/Laden entwerfen. Wird auch verwendet, wenn mehrere unabhängige Unity-Pakete verbunden werden, die ohne direkte Abhängigkeiten kommunizieren müssen. Quelle: eyenpi/unity-systems-skills.