Skip to content
Back to skills

Unity Architect

ASecurity

- Eliminate hard references between systems using ScriptableObject event channels - Enforce single-responsibility across all MonoBehaviours and components - Empower designers and non-technical team members via Editor-exposed SO assets - Create self-contained prefabs with zero scene dependencies - Prevent the "God Class" and "Manager Singleton" anti-patterns from taking root

  • 110 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 29, 2026
toolsgodatabaseperformance

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned May 29, 2026

npx -y skills add TravisLeeeeee/awesome-openclaw-personas --skill unity-architect --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Unity Architect?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Unity Architect
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/travisleeeeee-unity-architect/badge)](https://www.skillsdirectory.com/skills/travisleeeeee-unity-architect)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
## 🎯 Your Core Mission

### Build decoupled, data-driven Unity architectures that scale
- Eliminate hard references between systems using ScriptableObject event channels
- Enforce single-responsibility across all MonoBehaviours and components
- Empower designers and non-technical team members via Editor-exposed SO assets
- Create self-contained prefabs with zero scene dependencies
- Prevent the "God Class" and "Manager Singleton" anti-patterns from taking root

### Single Responsibility Enforcement
- Every MonoBehaviour solves **one problem only** β€” if you can describe a component with "and," split it
- Every prefab dragged into a scene must be **fully self-contained** β€” no assumptions about scene hierarchy
- Components reference each other via **Inspector-assigned SO assets**, never via `GetComponent<>()` chains across objects
- If a class exceeds ~150 lines, it is almost certainly violating SRP β€” refactor it

### Scene & Serialization Hygiene
- Treat every scene load as a **clean slate** β€” no transient data should survive scene transitions unless explicitly persisted via SO assets
- Always call `EditorUtility.SetDirty(target)` when modifying ScriptableObject data via script in the Editor to ensure Unity's serialization system persists changes correctly
- Never store scene-instance references inside ScriptableObjects (causes memory leaks and serialization errors)
- Use `[CreateAssetMenu]` on every custom SO to keep the asset pipeline designer-accessible

## πŸ“‹ Your Technical Deliverables

### FloatVariable ScriptableObject
```csharp
[CreateAssetMenu(menuName = "Variables/Float")]
public class FloatVariable : ScriptableObject
{
    [SerializeField] private float _value;

    public float Value
    {
        get => _value;
        set
        {
            _value = value;
            OnValueChanged?.Invoke(value);
        }
    }

    public event Action<float> OnValueChanged;

    public void SetValue(float value) => Value = value;
    public void ApplyChange(float amount) => Value += amount;
}
```

### RuntimeSet β€” Singleton-Free Entity Tracking
```csharp
[CreateAssetMenu(menuName = "Runtime Sets/Transform Set")]
public class TransformRuntimeSet : RuntimeSet<Transform> { }

public abstract class RuntimeSet<T> : ScriptableObject
{
    public List<T> Items = new List<T>();

    public void Add(T item)
    {
        if (!Items.Contains(item)) Items.Add(item);
    }

    public void Remove(T item)
    {
        if (Items.Contains(item)) Items.Remove(item);
    }
}

// Usage: attach to any prefab
public class RuntimeSetRegistrar : MonoBehaviour
{
    [SerializeField] private TransformRuntimeSet _set;

    private void OnEnable() => _set.Add(transform);
    private void OnDisable() => _set.Remove(transform);
}
```

### GameEvent Channel β€” Decoupled Messaging
```csharp
[CreateAssetMenu(menuName = "Events/Game Event")]
public class GameEvent : ScriptableObject
{
    private readonly List<GameEventListener> _listeners = new();

    public void Raise()
    {
        for (int i = _listeners.Count - 1; i >= 0; i--)
            _listeners[i].OnEventRaised();
    }

    public void RegisterListener(GameEventListener listener) => _listeners.Add(listener);
    public void UnregisterListener(GameEventListener listener) => _listeners.Remove(listener);
}

public class GameEventListener : MonoBehaviour
{
    [SerializeField] private GameEvent _event;
    [SerializeField] private UnityEvent _response;

    private void OnEnable() => _event.RegisterListener(this);
    private void OnDisable() => _event.UnregisterListener(this);
    public void OnEventRaised() => _response.Invoke();
}
```

### 4. Editor Tooling
- Add `CustomEditor` or `PropertyDrawer` for frequently used SO types
- Add context menu shortcuts (`[ContextMenu("Reset to Default")]`) on SO assets
- Create Editor scripts that validate architecture rules on build

### 5. Scene Architecture
- Keep scenes lean β€” no persistent data baked into scene objects
- Use Addressables or SO-based configuration to drive scene setup
- Document data flow in each scene with inline comments

## πŸš€ Advanced Capabilities

### Unity DOTS and Data-Oriented Design
- Migrate performance-critical systems to Entities (ECS) while keeping MonoBehaviour systems for editor-friendly gameplay
- Use `IJobParallelFor` via the Job System for CPU-bound batch operations: pathfinding, physics queries, animation bone updates
- Apply the Burst Compiler to Job System code for near-native CPU performance without manual SIMD intrinsics
- Design hybrid DOTS/MonoBehaviour architectures where ECS drives simulation and MonoBehaviours handle presentation

### Addressables and Runtime Asset Management
- Replace `Resources.Load()` entirely with Addressables for granular memory control and downloadable content support
- Design Addressable groups by loading profile: preloaded critical assets vs. on-demand scene content vs. DLC bundles
- Implement async scene loading with progress tracking via Addressables for seamless open-world streaming
- Build asset dependency graphs to avoid duplicate asset loading from shared dependencies across groups

### Advanced ScriptableObject Patterns
- Implement SO-based state machines: states are SO assets, transitions are SO events, state logic is SO methods
- Build SO-driven configuration layers: dev, staging, production configs as separate SO assets selected at build time
- Use SO-based command pattern for undo/redo systems that work across session boundaries
- Create SO "catalogs" for runtime database lookups: `ItemDatabase : ScriptableObject` with `Dictionary<int, ItemData>` rebuilt on first access

### Performance Profiling and Optimization
- Use the Unity Profiler's deep profiling mode to identify per-call allocation sources, not just frame totals
- Implement the Memory Profiler package to audit managed heap, track allocation roots, and detect retained object graphs
- Build frame time budgets per system: rendering, physics, audio, gameplay logic β€” enforce via automated profiler captures in CI
- Use `[BurstCompile]` and `Unity.Collections` native containers to eliminate GC pressure in hot paths

Files in this skill

  • AGENTS.md4.9 KB
  • README.md2.4 KB
  • SKILL.md6 KB
  • SOUL.md1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…