Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Unity Engine integration skill for project setup, C# scripting, scene management, prefab creation, and editor automation. Enables LLMs to interact with Unity Editor through MCP servers for asset manipulation, script generation, and automated workflows.
.claude/skills/a5c-ai-unity-development/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 85% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 67% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 91% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 53% | 0% |
Comprehensive Unity Engine development integration for AI-assisted game creation, editor automation, and project management.
This skill provides capabilities for interacting with Unity projects, including C# scripting, scene manipulation, prefab management, and build automation. It leverages the Unity MCP ecosystem for direct editor integration when available.
For direct Unity Editor integration:
json{ "mcpServers": { "unity": { "command": "npx", "args": ["-y", "unity-mcp"], "env": { "UNITY_PROJECT_PATH": "/path/to/unity/project" } } } }
Alternative MCP servers:
unity-mcp (CoplayDev) - Official Unity MCP bridgeUnity-MCP (IvanMurzak) - Editor & Runtime supportmcp-unity (CoderGamester) - Cursor/Claude Code integrationcsharpusing UnityEngine; public class PlayerController : MonoBehaviour { [Header("Movement Settings")] [SerializeField] private float moveSpeed = 5f; [SerializeField] private float jumpForce = 10f; [Header("Ground Check")] [SerializeField] private Transform groundCheck; [SerializeField] private float groundRadius = 0.2f; [SerializeField] private LayerMask groundLayer; private Rigidbody2D rb; private bool isGrounded; private void Awake() { rb = GetComponent<Rigidbody2D>(); } private void Update() { isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, groundLayer); HandleInput(); } private void FixedUpdate() { HandleMovement(); } private void HandleInput() { if (Input.GetButtonDown("Jump") && isGrounded) { rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse); } } private void HandleMovement() { float horizontal = Input.GetAxisRaw("Horizontal"); rb.velocity = new Vector2(horizontal * moveSpeed, rb.velocity.y); } }
csharpusing UnityEngine; [CreateAssetMenu(fileName = "NewEnemyData", menuName = "Game/Enemy Data")] public class EnemyData : ScriptableObject { [Header("Basic Info")] public string enemyName; public Sprite icon; [Header("Stats")] public int maxHealth = 100; public float moveSpeed = 3f; public int damage = 10; [Header("Combat")] public float attackRange = 2f; public float attackCooldown = 1.5f; [Header("Rewards")] public int experienceReward = 50; public GameObject[] lootDrops; }
csharpusing UnityEngine; using UnityEditor; [CustomEditor(typeof(EnemyData))] public class EnemyDataEditor : Editor { public override void OnInspectorGUI() { EnemyData enemyData = (EnemyData)target; EditorGUILayout.BeginHorizontal(); if (enemyData.icon != null) { GUILayout.Box(enemyData.icon.texture, GUILayout.Width(64), GUILayout.Height(64)); } EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField(enemyData.enemyName, EditorStyles.boldLabel); EditorGUILayout.LabelField($"HP: {enemyData.maxHealth} | DMG: {enemyData.damage}"); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); DrawDefaultInspector(); } }
javascriptconst unityScriptTask = defineTask({ name: 'unity-script-generation', description: 'Generate Unity C# script', inputs: { scriptType: { type: 'string', required: true }, // MonoBehaviour, ScriptableObject, Editor className: { type: 'string', required: true }, features: { type: 'array', required: true }, outputPath: { type: 'string', required: true } }, outputs: { scriptPath: { type: 'string' }, success: { type: 'boolean' } }, async run(inputs, taskCtx) { return { kind: 'skill', title: `Generate Unity script: ${inputs.className}`, skill: { name: 'unity-development', context: { operation: 'generate_script', scriptType: inputs.scriptType, className: inputs.className, features: inputs.features, outputPath: inputs.outputPath } }, io: { inputJsonPath: `tasks/${taskCtx.effectId}/input.json`, outputJsonPath: `tasks/${taskCtx.effectId}/result.json` } }; } });
| Tool | Description | |------|-------------| | unity_create_gameobject | Create new GameObject in scene | | unity_modify_component | Add/modify component on GameObject | | unity_create_script | Generate and attach C# script | | unity_build | Trigger Unity build | | unity_run_tests | Execute Unity Test Framework tests | | unity_import_asset | Import and configure assets | | unity_scene_hierarchy | Query scene structure | | unity_project_settings | Read/modify project settings |
json{ "mcpServers": { "unity": { "command": "uvx", "args": ["unity-mcp"], "env": { "UNITY_PROJECT_PATH": "C:/Projects/MyGame", "UNITY_VERSION": "2022.3.20f1" } } } }
| Platform | Key Considerations | |----------|-------------------| | PC/Mac | Memory less constrained, full shader support | | Mobile | Texture compression, draw call batching, thermal limits | | Console | Certification requirements, memory budgets, TCR compliance | | WebGL | No threading, limited memory, shader restrictions |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 18,010 | 8,600 | -52% | 1 | 1 | 0% | 3,835 | 3,911 | +2% | 0 | 0 | — |
case-02 | pass→pass | 13,287 | 12,410 | -7% | 1 | 1 | 0% | 2,217 | 4,321 | +95% | 0 | 0 | — |
case-03 | pass→pass | 10,165 | 7,065 | -30% | 1 | 1 | 0% | 1,620 | 3,460 | +114% | 0 | 0 | — |
case-04 | pass→pass | 17,891 | 12,203 | -32% | 1 | 1 | 0% | 2,805 | 4,481 | +60% | 0 | 0 | — |
case-05 | pass→pass | 13,621 | 11,296 | -17% | 1 | 1 | 0% | 2,116 | 3,881 | +83% | 0 | 0 | — |
case-06 | pass→pass | 6,622 | 7,724 | +17% | 1 | 1 | 0% | 991 | 3,366 | +240% | 0 | 0 | — |
case-07 | pass→pass | 14,177 | 11,189 | -21% | 1 | 1 | 0% | 2,221 | 3,788 | +71% | 0 | 0 | — |
case-08 | pass→pass | 10,924 | 10,085 | -8% | 1 | 1 | 0% | 2,118 | 3,974 | +88% | 0 | 0 | — |
case-09 | pass→pass | 12,348 | 15,206 | +23% | 1 | 1 | 0% | 2,386 | 5,182 | +117% | 0 | 0 | — |
case-10 | fail→pass | 16,018 | 13,558 | -15% | 1 | 1 | 0% | 2,484 | 4,597 | +85% | 0 | 0 | — |
case-11 | pass→pass | 22,010 | 21,054 | -4% | 1 | 1 | 0% | 3,279 | 5,164 | +57% | 0 | 0 | — |
case-12 | pass→pass | 22,043 | 25,023 | +14% | 1 | 1 | 0% | 3,137 | 5,506 | +76% | 0 | 0 | — |
case-13 | fail→pass | 8,158 | 2,561 | -69% | 1 | 1 | 0% | 1,423 | 2,383 | +67% | 0 | 0 | — |
case-14 | fail→pass | 9,586 | 2,137 | -78% | 1 | 1 | 0% | 1,264 | 2,417 | +91% | 0 | 0 | — |
case-15 | fail→pass | 9,272 | 2,809 | -70% | 1 | 1 | 0% | 1,594 | 2,437 | +53% | 0 | 0 | — |
case-16 | fail→pass | 12,130 | 2,158 | -82% | 1 | 1 | 0% | 1,652 | 2,468 | +49% | 0 | 0 | — |
case-17 | pass→pass | 17,898 | 21,673 | +21% | 1 | 1 | 0% | 2,792 | 5,127 | +84% | 0 | 0 | — |
case-18 | pass→pass | 24,341 | 19,381 | -20% | 1 | 1 | 0% | 3,586 | 5,073 | +41% | 0 | 0 | — |
case-19 | pass→pass | 19,847 | 12,523 | -37% | 1 | 1 | 0% | 2,255 | 3,994 | +77% | 0 | 0 | — |
case-20 | pass→pass | 8,835 | 8,791 | -0% | 1 | 1 | 0% | 1,294 | 3,338 | +158% | 0 | 0 | — |
case-21 | pass→pass | 10,422 | 12,367 | +19% | 1 | 1 | 0% | 1,531 | 2,951 | +93% | 0 | 0 | — |
case-22 | pass→pass | 8,394 | 14,742 | +76% | 1 | 1 | 0% | 1,587 | 4,180 | +163% | 0 | 0 | — |
case-23 | pass→pass | 8,773 | 9,352 | +7% | 1 | 1 | 0% | 1,427 | 3,507 | +146% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +26 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.