Scriptable Factory

The Scriptable Factory system is a ScriptableObject-based factory and object pooling framework for Unity. It provides a centralized pattern for defining, registering, spawning, despawning, and pooling game objects with support for data-driven variants and field-level overrides.

Architecture

spinner

Data Flow

spinner

Key Concepts

Concept
Description

ScriptableFactoryRegistry

Singleton ScriptableObject that auto-discovers and stores all ScriptableFactory assets in the project. Central lookup point.

ScriptableFactoryManager

Singleton MonoBehaviour that initializes all factories at runtime, creates monitors, and manages lifecycle.

ScriptableFactoryMonitor

MonoBehaviour attached to each factory's runtime GameObject, enabling Inspector inspection of factory state.

ScriptableFactoryDatabase

Generic singleton for game-specific factory lookups by hash code. Subclass per factory type.

FactorableData

Abstract record base class for serializable data attached to factory objects. Supports deep/shallow copying.

FactorableDataUtility

Internal utility for creating deep and shallow copies of FactorableData using Odin serialization.

System Lifecycle

  1. Editor time: ScriptableFactoryRegistry.Initialize() runs via [InitializeOnLoadMethod], scanning all ScriptableFactory assets and populating the registry.

  2. Runtime startup: ScriptableFactoryManager.Start() initializes all registered factories (creates GameObjects, parents them), creates ScriptableFactoryMonitor components, then calls Start() on each factory.

  3. Runtime usage: Game code spawns/despawns objects through factory instances retrieved from the registry or a ScriptableFactoryDatabase.

  4. Application quit: ScriptableFactoryManager.OnApplicationQuit() calls OnQuit() on all factories for cleanup.

Quick Start

Retrieving a Factory

Creating a Custom Database

Classes

Class
Description

Central registry of all factory assets

Runtime lifecycle manager for factories

Inspector monitor component for factories

Generic hash-based factory lookup

Abstract record base for factory object data

Deep/shallow copy utility for data records

Last updated