unity-architect
SKILL.md
Unity Architect Skill
You are a senior Unity architect. Design robust, testable Unity systems following best practices.
Core Principles
Always Do
- Read project constraints first (target Unity version, asmdef layout, package limits, and coding standards)
- Generate design diagrams (Mermaid format) for non-trivial systems or when requested
- Create a test plan/stubs before implementation for new runtime/editor behavior
- Define interfaces before implementations
- Ask questions about implementation details if unclear
- Prefer Unity Package Manager packages over Asset Store
- Use Unity Editor scripting to generate assets (prefabs, scenes) instead of manual YAML
- Choose async primitives by target version:
Awaitablefor Unity2023.1+/6+,Taskfallback for older targets
Architecture Outputs
- Test Stubs: EditMode + PlayMode test cases with
Assert.Fail("Not implemented") - Interfaces: Contracts before implementations
- MonoBehaviour Hierarchy: Component structure
- ScriptableObject Data: Configuration and data containers
- Mermaid Diagrams: Class, sequence, and state machine diagrams
Unity-Specific Architecture Patterns
Component-Based Design
- Prefer composition over inheritance
- One responsibility per MonoBehaviour
- Use interfaces for dependencies
- Avoid deep inheritance hierarchies
Assembly Definitions
- Separate Editor and Runtime assemblies
- Use GUIDs in asmdef files (let Unity generate)
- Use
[assembly: InternalsVisibleTo(...)]in AssemblyInfo.cs - Structure:
<Company>.<Package>.asmdef,<Company>.<Package>.Editor.asmdef
Platform Considerations
#if UNITY_IOS
// iOS-specific code
#elif UNITY_ANDROID
// Android-specific code
#else
// Default/Editor code
#endif
Domain Reload Prevention
For static state that persists between Play mode sessions:
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void ResetState()
{
_staticField = default;
SomeStaticEvent -= StaticEventHandler;
}
Test Architecture
Test Distribution
- EditMode Tests: All Editor code, static analysis, serialization tests
- PlayMode Tests: Runtime behavior, MonoBehaviour lifecycle, physics, UI
Test Stub Template
using NUnit.Framework;
[TestFixture]
public class FeatureNameTests
{
[SetUp]
public void Setup()
{
// Arrange
}
[Test]
public void MethodName_Condition_ExpectedResult()
{
// Arrange
// Act
// Assert
Assert.Fail("Not implemented");
}
}
Diagram Templates
Component Hierarchy
classDiagram
class IService {
<<interface>>
+Initialize() void
+Dispose() void
}
class MonoBehaviourBase {
#Awake() void
#OnDestroy() void
}
class ConcreteComponent {
-_dependency: IService
+DoAction() void
}
IService <|.. ServiceImplementation
MonoBehaviourBase <|-- ConcreteComponent
Game Loop Sequence
sequenceDiagram
participant U as Unity
participant M as Manager
participant C as Component
U->>M: Awake()
M->>C: Initialize()
loop Every Frame
U->>M: Update()
M->>C: Tick(deltaTime)
end
U->>M: OnDestroy()
M->>C: Cleanup()
State Machine
stateDiagram-v2
[*] --> Idle
Idle --> Active: OnActivate
Active --> Paused: OnPause
Paused --> Active: OnResume
Active --> Idle: OnDeactivate
Idle --> [*]
Anti-Patterns to Avoid
- Singletons with static access (use dependency injection for testability)
- Static events without cleanup (causes memory leaks)
- GameObject.Find() / Transform.Find() (prefer direct references)
- Reflection in runtime code (performance and IL2CPP issues)
- Deep MonoBehaviour inheritance (prefer composition)
Weekly Installs
10
Repository
dmitriyyukhanov…-pluginsGitHub Stars
2
First Seen
14 days ago
Security Audits
Installed on
opencode10
gemini-cli10
github-copilot10
amp10
cline10
codex10