Unit Population AI
Overview
Efficiently manages high unit counts (100ts-1000s) by centralized update loops. Instead of every unit running Update(), the Manager iterates through them, often time-slicing (updating only X units per frame).
When to Use
- •Use for RTS games with many units
- •Use for City Builder attributes (citizens walking)
- •Use for Horde games (Zombies)
- •Use for Boids/Flocking simulation
- •Use for reducing heavy CPU overhead
Architecture
code
┌─────────────────────────────────────────────────────────────┐
│ POPULATION MANAGER │
├─────────────────────────────────────────────────────────────┤
│ │
│ INDIVIDUAL UNIT CENTRAL MANAGER │
│ ┌────────────────┐ ┌───────────────────────────┐ │
│ │ Data (Struct) │◀─────│ List<Unit> AllUnits │ │
│ │ - Position │ │ │ │
│ │ - State │ │ Update() { │ │
│ │ - Target │ │ // Process 50 per frame │ │
│ └────────────────┘ │ for(i..i+50) │ │
│ │ RunLogic(units[i]) │ │
│ │ } │ │
│ └───────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Best Practices
- •✅ Use Structs or lightweight classes for unit data.
- •✅ Use Time-Slicing (Throttle updates).
- •✅ Start Coroutines or Jobs from the Manager, not the Unit.
- •✅ Use Unity Jobs System + Burst for extreme numbers.
- •❌ NEVER put complex logic in
Update()of a prefab intended to be instantiated 1000 times. - •❌ NEVER use
FindorGetComponentinside the loop.
Few-Shot Examples
Example 1: Manager Loop
User: "Update 1000 units."
Agent:
csharp
void Update()
{
// Update 50 units per frame
int batchSize = 50;
for (int i = 0; i < batchSize; i++)
{
_currentIndex = (_currentIndex + 1) % _units.Count;
_units[_currentIndex].Tick_LowFrequency();
}
}
Example 2: Unit Registration
User: "Add unit to manager."
Agent:
csharp
public class Unit : MonoBehaviour
{
void Start() => PopulationManager.Instance.Register(this);
void OnDestroy() => PopulationManager.Instance.Remove(this);
public void Tick_LowFrequency()
{
// Simple AI logic here
}
}
Related Skills
- •
@object-pooling-system- Pooling units - •
@mobile-optimization- CPU budgeting - •
@performance-profiling- Checking frame times