Marketplace

Unnamed Skill

Supports Unity scene and GameObject creation, management, and analysis. Efficiently performs hierarchy operations, component configuration, and scene analysis. Use when: scene creation, scene loading, GameObject creation, component addition, hierarchy retrieval, scene analysis

$ インストール

git clone https://github.com/akiojin/unity-mcp-server /tmp/unity-mcp-server && cp -r /tmp/unity-mcp-server/.claude-plugin/plugins/unity-mcp-server/skills/unity-scene-management ~/.claude/skills/unity-mcp-server

// tip: Run this command in your terminal to install the skill


name: unity-scene-management description: Supports Unity scene and GameObject creation, management, and analysis. Efficiently performs hierarchy operations, component configuration, and scene analysis. Use when: scene creation, scene loading, GameObject creation, component addition, hierarchy retrieval, scene analysis allowed-tools: Read, Grep, Glob

Unity Scene & GameObject Management

A guide for creating, managing, and analyzing Unity scenes, GameObjects, and components.

Quick Start

1. Check Current Scene State

// List loaded scenes
mcp__unity-mcp-server__list_scenes({ includeLoadedOnly: true })

// Current scene info
mcp__unity-mcp-server__get_scene_info({ includeGameObjects: true })

// Get hierarchy (lightweight)
mcp__unity-mcp-server__get_hierarchy({
  nameOnly: true,
  maxObjects: 100
})

2. Create GameObject

// Empty GameObject
mcp__unity-mcp-server__create_gameobject({
  name: "GameManager"
})

// Primitive
mcp__unity-mcp-server__create_gameobject({
  name: "Floor",
  primitiveType: "plane",
  position: { x: 0, y: 0, z: 0 },
  scale: { x: 10, y: 1, z: 10 }
})

3. Add Component

// Add Rigidbody
mcp__unity-mcp-server__add_component({
  gameObjectPath: "/Player",
  componentType: "Rigidbody",
  properties: { mass: 1.5, useGravity: true }
})

Scene Operations

Create Scene

// Create and load new scene
mcp__unity-mcp-server__create_scene({
  sceneName: "Level01",
  path: "Assets/Scenes/",
  loadScene: true,
  addToBuildSettings: true
})

Load Scene

// Single scene load (replaces current scene)
mcp__unity-mcp-server__load_scene({
  scenePath: "Assets/Scenes/MainMenu.unity",
  loadMode: "Single"
})

// Additive load (adds to current scene)
mcp__unity-mcp-server__load_scene({
  scenePath: "Assets/Scenes/UI.unity",
  loadMode: "Additive"
})

Save Scene

// Save current scene
mcp__unity-mcp-server__save_scene()

// Save as new file
mcp__unity-mcp-server__save_scene({
  scenePath: "Assets/Scenes/Level01_backup.unity",
  saveAs: true
})

List & Info

// All scenes in project
mcp__unity-mcp-server__list_scenes()

// Only scenes in build settings
mcp__unity-mcp-server__list_scenes({ includeBuildScenesOnly: true })

// Specific scene details
mcp__unity-mcp-server__get_scene_info({
  scenePath: "Assets/Scenes/Main.unity",
  includeGameObjects: true
})

GameObject Management

Creation Options

// Full specification
mcp__unity-mcp-server__create_gameobject({
  name: "Enemy",
  primitiveType: "cube",
  parentPath: "/Enemies",
  position: { x: 5, y: 1, z: 0 },
  rotation: { x: 0, y: 45, z: 0 },
  scale: { x: 1, y: 2, z: 1 },
  tag: "Enemy",
  layer: 8
})

Primitive Types

TypeDescription
cubeCube
sphereSphere
cylinderCylinder
capsuleCapsule
planePlane
quadQuad (2D plane)

Search

// Search by name
mcp__unity-mcp-server__find_gameobject({
  name: "Player",
  exactMatch: true
})

// Search by tag
mcp__unity-mcp-server__find_gameobject({
  tag: "Enemy"
})

// Search by layer
mcp__unity-mcp-server__find_gameobject({
  layer: 8  // 0-31
})

// Partial match search
mcp__unity-mcp-server__find_gameobject({
  name: "Spawn",
  exactMatch: false
})

Modify

// Transform change
mcp__unity-mcp-server__modify_gameobject({
  path: "/Player",
  position: { x: 0, y: 1, z: 0 },
  rotation: { x: 0, y: 90, z: 0 }
})

// Name, tag, layer change
mcp__unity-mcp-server__modify_gameobject({
  path: "/OldName",
  name: "NewName",
  tag: "Player",
  layer: 3
})

// Change parent object
mcp__unity-mcp-server__modify_gameobject({
  path: "/Player",
  parentPath: "/Characters"
})

// Unparent
mcp__unity-mcp-server__modify_gameobject({
  path: "/Characters/Player",
  parentPath: null
})

// Change active state
mcp__unity-mcp-server__modify_gameobject({
  path: "/Player",
  active: false
})

Delete

// Single delete
mcp__unity-mcp-server__delete_gameobject({
  path: "/OldObject"
})

// Multiple delete
mcp__unity-mcp-server__delete_gameobject({
  paths: ["/Object1", "/Object2", "/Object3"]
})

// Keep children
mcp__unity-mcp-server__delete_gameobject({
  path: "/Parent",
  includeChildren: false
})

Get Hierarchy

// Lightweight (names and paths only) - for large scenes
mcp__unity-mcp-server__get_hierarchy({
  nameOnly: true,
  maxObjects: 500
})

// Detailed (with components and transform) - for small scenes
mcp__unity-mcp-server__get_hierarchy({
  includeComponents: true,
  includeTransform: true,
  maxObjects: 50
})

// Specific subtree only
mcp__unity-mcp-server__get_hierarchy({
  rootPath: "/Enemies",
  maxDepth: 2
})

// Exclude inactive objects
mcp__unity-mcp-server__get_hierarchy({
  includeInactive: false
})

Component System

Add Component

// Basic addition
mcp__unity-mcp-server__add_component({
  gameObjectPath: "/Player",
  componentType: "Rigidbody"
})

// With properties
mcp__unity-mcp-server__add_component({
  gameObjectPath: "/Player",
  componentType: "BoxCollider",
  properties: {
    size: { x: 1, y: 2, z: 1 },
    center: { x: 0, y: 1, z: 0 },
    isTrigger: false
  }
})

// Custom script
mcp__unity-mcp-server__add_component({
  gameObjectPath: "/Player",
  componentType: "PlayerController"
})

Modify Component

modify_component - Batch change multiple properties

mcp__unity-mcp-server__modify_component({
  gameObjectPath: "/Player",
  componentType: "Rigidbody",
  properties: {
    mass: 2.0,
    drag: 0.5,
    useGravity: true
  }
})

set_component_field - Precise single field change

// Serialized field (including private)
mcp__unity-mcp-server__set_component_field({
  gameObjectPath: "/Player",
  componentType: "PlayerController",
  fieldPath: "_moveSpeed",
  value: 5.0
})

// Nested field
mcp__unity-mcp-server__set_component_field({
  gameObjectPath: "/Player",
  componentType: "PlayerController",
  fieldPath: "settings.jumpHeight",
  value: 3.0
})

// Array element
mcp__unity-mcp-server__set_component_field({
  gameObjectPath: "/Player",
  componentType: "Inventory",
  fieldPath: "items[0].count",
  value: 10
})

// Object reference
mcp__unity-mcp-server__set_component_field({
  gameObjectPath: "/Player",
  componentType: "PlayerController",
  fieldPath: "targetTransform",
  objectReference: { assetPath: "Assets/Prefabs/Target.prefab" }
})

// Enum value
mcp__unity-mcp-server__set_component_field({
  gameObjectPath: "/Player",
  componentType: "PlayerController",
  fieldPath: "state",
  enumValue: "Running"
})

modify_component vs set_component_field

Featuremodify_componentset_component_field
Use caseBatch multiple propertiesPrecise single field
Nested support❌ Top-level only✅ Dot notation
Array elements[index] supported
Private fields△ Serialized only✅ All serialized
Object references✅ assetPath/guid

List & Remove Component

// List components
mcp__unity-mcp-server__list_components({
  gameObjectPath: "/Player"
})

// Remove component
mcp__unity-mcp-server__remove_component({
  gameObjectPath: "/Player",
  componentType: "OldScript"
})

// When multiple of same type exist
mcp__unity-mcp-server__remove_component({
  gameObjectPath: "/Player",
  componentType: "AudioSource",
  componentIndex: 1  // Second AudioSource
})

Available Component Types

// Search by category
mcp__unity-mcp-server__get_component_types({
  category: "Physics"  // Physics, Rendering, UI, etc.
})

// Search by name
mcp__unity-mcp-server__get_component_types({
  search: "Collider"
})

// Only those addable via AddComponent
mcp__unity-mcp-server__get_component_types({
  onlyAddable: true
})

Scene Analysis

Analyze Entire Scene

// Object statistics
mcp__unity-mcp-server__analyze_scene_contents({
  groupByType: true,
  includePrefabInfo: true
})

// With memory info
mcp__unity-mcp-server__analyze_scene_contents({
  includeMemoryInfo: true
})

Component Search

// Find objects with specific component
mcp__unity-mcp-server__find_by_component({
  componentType: "Light",
  searchScope: "scene"
})

// Include prefabs in search
mcp__unity-mcp-server__find_by_component({
  componentType: "AudioSource",
  searchScope: "all",
  includeInactive: true
})

Detailed Inspection

// GameObject details
mcp__unity-mcp-server__get_gameobject_details({
  gameObjectName: "Player",
  includeComponents: true,
  includeMaterials: true,
  includeChildren: true,
  maxDepth: 3
})

// All component property values
mcp__unity-mcp-server__get_component_values({
  gameObjectName: "Player",
  componentType: "Rigidbody",
  includePrivateFields: true
})

// Object reference relationships
mcp__unity-mcp-server__get_object_references({
  gameObjectName: "Player",
  includeAssetReferences: true,
  includeHierarchyReferences: true
})

Common Workflows

Scene Setup

// 1. Create new scene
mcp__unity-mcp-server__create_scene({
  sceneName: "GameLevel",
  loadScene: true
})

// 2. Create environment objects
mcp__unity-mcp-server__create_gameobject({
  name: "Environment"
})

mcp__unity-mcp-server__create_gameobject({
  name: "Ground",
  primitiveType: "plane",
  parentPath: "/Environment",
  scale: { x: 50, y: 1, z: 50 }
})

// 3. Set up lighting
mcp__unity-mcp-server__create_gameobject({
  name: "Sun"
})

mcp__unity-mcp-server__add_component({
  gameObjectPath: "/Sun",
  componentType: "Light",
  properties: {
    type: "Directional",
    intensity: 1.0,
    color: { r: 1, g: 0.95, b: 0.8, a: 1 }
  }
})

// 4. Save
mcp__unity-mcp-server__save_scene()

UI Canvas Setup

// Create Canvas
mcp__unity-mcp-server__create_gameobject({ name: "Canvas" })
mcp__unity-mcp-server__add_component({
  gameObjectPath: "/Canvas",
  componentType: "Canvas",
  properties: { renderMode: "ScreenSpaceOverlay" }
})
mcp__unity-mcp-server__add_component({
  gameObjectPath: "/Canvas",
  componentType: "CanvasScaler"
})
mcp__unity-mcp-server__add_component({
  gameObjectPath: "/Canvas",
  componentType: "GraphicRaycaster"
})

// Add button
mcp__unity-mcp-server__create_gameobject({
  name: "StartButton",
  parentPath: "/Canvas"
})
mcp__unity-mcp-server__add_component({
  gameObjectPath: "/Canvas/StartButton",
  componentType: "Button"
})

Physics Object Placement

// Create physics object
mcp__unity-mcp-server__create_gameobject({
  name: "PhysicsCube",
  primitiveType: "cube",
  position: { x: 0, y: 5, z: 0 }
})

// Add Rigidbody
mcp__unity-mcp-server__add_component({
  gameObjectPath: "/PhysicsCube",
  componentType: "Rigidbody",
  properties: { mass: 1.0 }
})

// Collider is auto-added (for primitives)

Common Mistakes

1. Wrong Path Format

// ❌ Without slash
gameObjectPath: "Player"

// ✅ Leading slash required
gameObjectPath: "/Player"

// ✅ Hierarchy path
gameObjectPath: "/Parent/Child/GrandChild"

2. Undefined Tag/Layer

// ❌ Using non-existent tag
tag: "CustomEnemy"  // Error

// ✅ Add tag first
mcp__unity-mcp-server__manage_tags({
  action: "add",
  tagName: "CustomEnemy"
})

3. Missing Inactive Objects

// ❌ Cannot find inactive object
mcp__unity-mcp-server__find_gameobject({ name: "HiddenObject" })

// ✅ Explicitly include inactive
mcp__unity-mcp-server__get_hierarchy({
  includeInactive: true
})

4. Performance Issues with Large Hierarchy

// ❌ Getting all info (high token usage)
mcp__unity-mcp-server__get_hierarchy({
  includeComponents: true,
  includeTransform: true,
  maxObjects: -1  // Unlimited
})

// ✅ Lightweight for overview
mcp__unity-mcp-server__get_hierarchy({
  nameOnly: true,
  maxObjects: 100
})

// ✅ Get details only for specific object
mcp__unity-mcp-server__get_gameobject_details({
  gameObjectName: "SpecificObject",
  includeComponents: true
})

5. Losing Changes Without Save

// ✅ Save after important changes
mcp__unity-mcp-server__save_scene()

Tool Reference

ToolPurpose
create_sceneCreate scene
load_sceneLoad scene
save_sceneSave scene
list_scenesList scenes
get_scene_infoGet scene info
create_gameobjectCreate GameObject
find_gameobjectFind GameObject
modify_gameobjectModify GameObject
delete_gameobjectDelete GameObject
get_hierarchyGet hierarchy
add_componentAdd component
modify_componentModify component (batch)
set_component_fieldModify field (precise)
remove_componentRemove component
list_componentsList components
get_component_typesList available types
analyze_scene_contentsAnalyze scene
find_by_componentFind by component
get_gameobject_detailsGet detailed info
get_component_valuesGet property values
manage_tagsManage tags
manage_layersManage layers