unity-architecture
Unity Architecture Advisor
Use this before generating lots of gameplay scripts or when the user asks for a cleaner architecture.
Workflow
- Identify scope: prototype, small game, or long-lived project.
- Define the core loop and the minimum runtime systems needed.
- Recommend the smallest architecture that fits the scope.
- Separate:
- scene/bootstrap layer
- gameplay/domain logic
- data/config assets
- view/presentation layer
- Call out what should stay simple now vs what is worth abstracting.
Output Format
When using this skill, structure the advice as:
- Project tier: prototype / small-game / long-lived
- Recommended modules: 3-7 modules with one-line responsibilities
- Scene/bootstrap plan: where composition and initialization happen
- Data ownership: what belongs in scene objects, ScriptableObjects, or pure C# classes
- Communication rules: direct refs, interfaces, events, or commands
- Performance risks: only the hot paths that matter
- Do now / skip now: avoid over-engineering
Default Guidance
- Prefer thin
MonoBehaviourscripts as composition bridges. - Put reusable gameplay rules in plain C# classes when possible.
- Use
ScriptableObjectfor authored config and shared static data, not as a default dump for runtime state. - Keep dependencies explicit. Avoid hidden global state unless the project size clearly justifies a small service layer.
- Favor simple module boundaries over framework-heavy architecture.
Explicit Execution Order and Entry Guards
Most "random" gameplay bugs trace back to two silent assumptions: that scripts run in a predictable order, and that Update runs only when its data is ready. Neither is true unless you make them so.
Make startup order explicit
Do not rely on Script Execution Order panels or accidental Awake ordering. Prefer these patterns in order of preference:
- One Bootstrap script as the single entry point. It owns the initialization sequence and calls
sub.Init()on the managers it creates. Only this one script has[DefaultExecutionOrder(-10000)]. - Pull, don't push: a subscriber that needs data calls
source.GetValue()on demand or subscribes to an event. A publisher that pushes into others during its ownAwakecreates hidden order dependencies. - Reserve
[DefaultExecutionOrder(n)]for load-bearing singletons only (Bootstrap, InputRouter, SceneController). If more than 3-4 scripts need it, the architecture is wrong, not the ordering.
The analogous ECS pattern — [UpdateBefore(typeof(BarSystem))] / [UpdateAfter] — works because the framework validates contradictions at sort time. In MonoBehaviour code the compiler won't catch them; be conservative. Source: EntitiesSamples/Docs/systems.md:32 — "if the ordering attributes of a group's children create a contradiction, an exception is thrown".
Make update preconditions explicit
Every Update / LateUpdate / FixedUpdate should open with guard clauses that early-return when the system is not ready. Prefer the cheapest check first:
void Update() {
if (!_isInitialized) return; // construction-time
if (_dataSource == null) return; // dependency-level
if (_paused) return; // gameplay-state
// real work here
}
A missing guard is the difference between "doesn't run yet" (safe) and "runs with stale/null data and silently corrupts state" (debug nightmare). The ECS equivalent is state.RequireForUpdate<Config>() in OnCreate, which turns the precondition into a system-level invariant. Source: Dots101/Entities101/Assets/HelloCube/3. Prefabs/SpawnSystem.cs:17-19 — the system does not update unless a Spawner entity exists.
Guardrails
Mode: Both (Semi-Auto + Full-Auto) — advisory only, no REST skills
- Do not start from a giant reusable framework unless the project truly needs it.
- Do not add layers just to satisfy textbook SOLID wording.
- Prefer a small architecture that can grow, not an impressive one that slows iteration.
Load Related Advisory Modules When Needed
- Pattern choice: see
../patterns/SKILL.md - Async / Update / UniTask decisions: see
../async/SKILL.md - Inspector-facing field design: see
../inspector/SKILL.md - Script quality review: see
../scriptdesign/SKILL.md
More from besty0728/unity-skills
unity-skills
Unity Editor automation via REST API — create scripts, analyze scenes, manage assets, control editor, and orchestrate workflows. Triggers: Unity, Unity Skills, in Unity, automate Unity, editor automation, create script, scene summary, build scene, 全自动模式, full auto, semi-auto, 半自动, Unity自动化, Unity编辑器, Unity技能, 操作Unity,在Unity中.
56unity-uitoolkit
UI Toolkit (UITK) for Unity — create/edit USS stylesheets and UXML layouts, configure UIDocument in scenes. Triggers: UI Toolkit, UITK, UXML, USS, UIDocument, PanelSettings, VisualElement, stylesheet, runtime UI, EditorWindow UI, 界面工具包, UI样式, 样式表, 可视化元素.
22unity-ui
Unity UI creation. Use when users want to create Canvas, Button, Text, Image, or other UI elements. Triggers: UI, canvas, button, text, image, panel, slider, toggle, UGUI, 界面, 按钮, 文本, 面板.
20unity-scriptableobject
ScriptableObject management. Use when users want to create, read, or modify ScriptableObject assets. Triggers: scriptableobject, SO, data asset, config, settings asset, 数据资产, 配置文件.
19unity-editor
Unity Editor control. Use when users want to enter play mode, select objects, undo/redo, or execute menu commands. Triggers: play, stop, pause, select, undo, redo, menu, editor, Unity编辑器, Unity播放, Unity撤销, Unity选择.
18unity-light
Unity lighting control. Use when users want to create or configure lights (Directional, Point, Spot, Area). Triggers: light, lighting, directional light, point light, spot light, shadows, intensity, 灯光, 光照, 阴影.
17