Game Developer
Core Workflow
- Analyze requirements — Identify genre, platforms, performance targets, multiplayer needs
- Design architecture — Plan ECS/component systems, optimize for target platforms
- Implement — Build core mechanics, graphics, physics, AI, networking
- Optimize — Profile and optimize for 60+ FPS, minimize memory/battery usage
- ✅ Validation checkpoint: Run Unity Profiler or Unreal Insights; verify frame time ≤16 ms (60 FPS) before proceeding. Identify and resolve CPU/GPU bottlenecks iteratively.
- Test — Cross-platform testing, performance validation, multiplayer stress tests
- ✅ Validation checkpoint: Confirm stable frame rate under stress load; run multiplayer latency/desync tests before shipping.
Reference Guide
Load detailed guidance based on context:
| Topic |
Reference |
Load When |
| Unity Development |
references/unity-patterns.md |
Unity C#, MonoBehaviour, Scriptable Objects |
| Unreal Development |
references/unreal-cpp.md |
Unreal C++, Blueprints, Actor components |
| ECS & Patterns |
references/ecs-patterns.md |
Entity Component System, game patterns |
| Performance |
references/performance-optimization.md |
FPS optimization, profiling, memory |
| Networking |
references/multiplayer-networking.md |
Multiplayer, client-server, lag compensation |
Constraints
MUST DO
- Target 60+ FPS on all platforms
- Use object pooling for frequent instantiation
- Implement LOD systems for optimization
- Profile performance regularly (CPU, GPU, memory)
- Use async loading for resources
- Implement proper state machines for game logic
- Cache component references (avoid GetComponent in Update)
- Use delta time for frame-independent movement
MUST NOT DO
- Instantiate/Destroy in tight loops or Update()
- Skip profiling and performance testing
- Use string comparisons for tags (use CompareTag)
- Allocate memory in Update/FixedUpdate loops
- Ignore platform-specific constraints (mobile, console)
- Use Find methods in Update loops
- Hardcode game values (use ScriptableObjects/data files)
Output Templates
When implementing game features, provide:
- Core system implementation (ECS component, MonoBehaviour, or Actor)
- Associated data structures (ScriptableObjects, structs, configs)
- Performance considerations and optimizations
- Brief explanation of architecture decisions
Key Code Patterns
Object Pooling (Unity C#)
public class ObjectPool<T> where T : Component
{
private readonly Queue<T> _pool = new();
private readonly T _prefab;
private readonly Transform _parent;
public ObjectPool(T prefab, int initialSize, Transform parent = null)
{
_prefab = prefab;
_parent = parent;
for (int i = 0; i < initialSize; i++)
Release(Create());
}
public T Get()
{
T obj = _pool.Count > 0 ? _pool.Dequeue() : Create();
obj.gameObject.SetActive(true);
return obj;
}
public void Release(T obj)
{
obj.gameObject.SetActive(false);
_pool.Enqueue(obj);
}
private T Create() => Object.Instantiate(_prefab, _parent);
}
Component Caching (Unity C#)
public class PlayerController : MonoBehaviour
{
// Cache all component references in Awake — never call GetComponent in Update
private Rigidbody _rb;
private Animator _animator;
private PlayerInput _input;
private void Awake()
{
_rb = GetComponent<Rigidbody>();
_animator = GetComponent<Animator>();
_input = GetComponent<PlayerInput>();
}
private void FixedUpdate()
{
// Use cached references; use deltaTime for frame-independence
Vector3 move = _input.MoveDirection * (speed * Time.fixedDeltaTime);
_rb.MovePosition(_rb.position + move);
}
}
State Machine (Unity C#)
public abstract class State
{
public abstract void Enter();
public abstract void Tick(float deltaTime);
public abstract void Exit();
}
public class StateMachine
{
private State _current;
public void TransitionTo(State next)
{
_current?.Exit();
_current = next;
_current.Enter();
}
public void Tick(float deltaTime) => _current?.Tick(deltaTime);
}
// Usage example
public class IdleState : State
{
private readonly Animator _animator;
public IdleState(Animator animator) => _animator = animator;
public override void Enter() => _animator.SetTrigger("Idle");
public override void Tick(float deltaTime) { /* poll transitions */ }
public override void Exit() { }
}
1---2name: game-developer3description: Use when building game systems, implementing Unity/Unreal Engine features, or optimizing game performance. Invoke to implement ECS architecture, configure physics systems and colliders, set up multiplayer networking with lag compensation, optimize frame rates to 60+ FPS targets, develop shaders, or apply game design patterns such as object pooling and state machines. Trigger keywords: Unity, Unreal Engine, game development, ECS architecture, game physics, multiplayer networking, game optimization, shader programming, game AI.4license: MIT5---67# Game Developer89## Core Workflow10111. **Analyze requirements** — Identify genre, platforms, performance targets, multiplayer needs122. **Design architecture** — Plan ECS/component systems, optimize for target platforms133. **Implement** — Build core mechanics, graphics, physics, AI, networking144. **Optimize** — Profile and optimize for 60+ FPS, minimize memory/battery usage15 - ✅ **Validation checkpoint:** Run Unity Profiler or Unreal Insights; verify frame time ≤16 ms (60 FPS) before proceeding. Identify and resolve CPU/GPU bottlenecks iteratively.165. **Test** — Cross-platform testing, performance validation, multiplayer stress tests17 - ✅ **Validation checkpoint:** Confirm stable frame rate under stress load; run multiplayer latency/desync tests before shipping.1819## Reference Guide2021Load detailed guidance based on context:2223| Topic | Reference | Load When |24|-------|-----------|-----------|25| Unity Development | `references/unity-patterns.md` | Unity C#, MonoBehaviour, Scriptable Objects |26| Unreal Development | `references/unreal-cpp.md` | Unreal C++, Blueprints, Actor components |27| ECS & Patterns | `references/ecs-patterns.md` | Entity Component System, game patterns |28| Performance | `references/performance-optimization.md` | FPS optimization, profiling, memory |29| Networking | `references/multiplayer-networking.md` | Multiplayer, client-server, lag compensation |3031## Constraints3233### MUST DO34- Target 60+ FPS on all platforms35- Use object pooling for frequent instantiation36- Implement LOD systems for optimization37- Profile performance regularly (CPU, GPU, memory)38- Use async loading for resources39- Implement proper state machines for game logic40- Cache component references (avoid GetComponent in Update)41- Use delta time for frame-independent movement4243### MUST NOT DO44- Instantiate/Destroy in tight loops or Update()45- Skip profiling and performance testing46- Use string comparisons for tags (use CompareTag)47- Allocate memory in Update/FixedUpdate loops48- Ignore platform-specific constraints (mobile, console)49- Use Find methods in Update loops50- Hardcode game values (use ScriptableObjects/data files)5152## Output Templates5354When implementing game features, provide:551. Core system implementation (ECS component, MonoBehaviour, or Actor)562. Associated data structures (ScriptableObjects, structs, configs)573. Performance considerations and optimizations584. Brief explanation of architecture decisions5960## Key Code Patterns6162### Object Pooling (Unity C#)63```csharp64public class ObjectPool<T> where T : Component65{66 private readonly Queue<T> _pool = new();67 private readonly T _prefab;68 private readonly Transform _parent;6970 public ObjectPool(T prefab, int initialSize, Transform parent = null)71 {72 _prefab = prefab;73 _parent = parent;74 for (int i = 0; i < initialSize; i++)75 Release(Create());76 }7778 public T Get()79 {80 T obj = _pool.Count > 0 ? _pool.Dequeue() : Create();81 obj.gameObject.SetActive(true);82 return obj;83 }8485 public void Release(T obj)86 {87 obj.gameObject.SetActive(false);88 _pool.Enqueue(obj);89 }9091 private T Create() => Object.Instantiate(_prefab, _parent);92}93```9495### Component Caching (Unity C#)96```csharp97public class PlayerController : MonoBehaviour98{99 // Cache all component references in Awake — never call GetComponent in Update100 private Rigidbody _rb;101 private Animator _animator;102 private PlayerInput _input;103104 private void Awake()105 {106 _rb = GetComponent<Rigidbody>();107 _animator = GetComponent<Animator>();108 _input = GetComponent<PlayerInput>();109 }110111 private void FixedUpdate()112 {113 // Use cached references; use deltaTime for frame-independence114 Vector3 move = _input.MoveDirection * (speed * Time.fixedDeltaTime);115 _rb.MovePosition(_rb.position + move);116 }117}118```119120### State Machine (Unity C#)121```csharp122public abstract class State123{124 public abstract void Enter();125 public abstract void Tick(float deltaTime);126 public abstract void Exit();127}128129public class StateMachine130{131 private State _current;132133 public void TransitionTo(State next)134 {135 _current?.Exit();136 _current = next;137 _current.Enter();138 }139140 public void Tick(float deltaTime) => _current?.Tick(deltaTime);141}142143// Usage example144public class IdleState : State145{146 private readonly Animator _animator;147 public IdleState(Animator animator) => _animator = animator;148 public override void Enter() => _animator.SetTrigger("Idle");149 public override void Tick(float deltaTime) { /* poll transitions */ }150 public override void Exit() { }151}152```