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 |
Используйте при создании многоразовых игровых систем Unity, создании пакетов UPM или разработке модульной архитектуры на основе ScriptableObject для игровых систем, таких как инвентарь, бой, диалог, квесты или сохранение/загрузка. Также используйте при подключении нескольких независимых пакетов Unity, которым необходимо взаимодействовать без прямых зависимостей. Источник: eyenpi/unity-systems-skills.