Overview
ScriptableObjects are Unity assets used to hold reusable data outside scene instances. They are especially valuable when many objects need to reference the same configuration data instead of duplicating it per prefab or per scene object. Unity’s docs frame them as data containers, while Sellers’ data-driven design guidance makes them especially relevant for balancing and systems-heavy game work. Unity’s newer architecture material pushes them further: not just as passive data, but as a foundation for event channels, shared variables, delegate objects, and modular subsystem wiring. (Unity Documentation, ScriptableObject, see source-unity-scriptableobject; Sellers, Advanced Game Design, see source-advanced-game-design; Unity, Create modular game architecture with ScriptableObjects, see source-unity-scriptableobjects-modular-architecture)
Setup
Basic pattern:
- Create a class deriving from
ScriptableObject. - Add
[CreateAssetMenu]so Unity can create assets from it. - Create one or more assets in the Project window.
- Reference those assets from scene scripts or systems.
Usage
Common uses:
- item or weapon data
- enemy or NPC configuration
- economy tuning values
- spawn tables
- reusable schedule or state data
This is one of the strongest Unity tools for data-driven design, because designers can tune values without editing code directly.
More modular projects also use ScriptableObjects for:
- event channels so systems can broadcast without hard-coded scene references
- shared runtime variables where multiple systems need to read the same changing value
- designer-authored configuration assets such as enemy archetypes, weapon profiles, dialogue metadata, or economy rulesets
This makes them a bridge between code architecture and design workflow rather than just a serialisation trick. That is one reason Unity now teaches them alongside modular project structure and productivity guidance. (Unity, Create modular game architecture with ScriptableObjects, see source-unity-scriptableobjects-modular-architecture; Unity, Tips to increase productivity with Unity 6, see source-unity-productivity-tips; Unity, The Unity Game Designer Playbook, see source-unity-game-designer-playbook)
Gotchas
- ScriptableObjects are not scene components; they are assets.
- They are good for shared design-time data, not a magic replacement for save-game architecture.
- Treat them as shared assets, not as a persistence system. Saving player progress still needs an explicit save/load approach.
- They can reduce duplication and scene overhead when many objects share the same configuration, but they do not automatically solve every performance issue. (Unity, Optimize performance for mobile, XR, and web games, see source-unity-performance-mobile-xr-web)
- Teams can overuse them and create fragmented data landscapes if naming and ownership are unclear.
Related
game-parts-and-attributes · internal-economy · npc-performance-at-scale · unity-prefabs · source-unity-scriptableobject · source-unity-scriptableobjects-modular-architecture · source-unity-game-designer-playbook